전체 글
-
데몬 쓰레드(daemon thread)공부/Java 2024. 5. 9. 16:31
데몬 쓰레드(daemon thread) - 일반 쓰레드(non-daemon thread)의 작업을 돕는 보조적인 역할을 수행- 일반 쓰레드가 모두 종료되면 자동적으로 종료된다. (보조할 쓰레드가 사라짐)- 가비지 컬렉터, 자동저장, 화면 자동갱신 등에 사용된다.- 무한루프와 조건문을 이용해서 실행 후 대기하다가, 특정조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다.※ setDaemon(boolean on)은 반드시 start()를 호풀하기 전에 실행되어야 한다. 그렇지 않으면 IllegalThreadStateException이 발생한다. 예제public void run() { while(true) { try { Thread.sleep(3 * 1000); // 3초마다 ..
-
쓰레드 그룹공부/Java 2024. 5. 8. 23:05
쓰레드 그룹(thread group) - 서로 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것- 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있어야 한다.- 쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 'main 쓰레드 그룹'에 속한다.- 자신을 생성한 쓰레드(부모 쓰레드)의 그룹과 우선순위를 상속받는다. 쓰레드 그룹의 생성자와 메서드생성자 / 메서드설명ThreadGroup(String name)지정된 이름의 새로운 쓰레드 그룹을 생성ThreadGroup(ThreadGroup parent, String name)지정된 쓰레드 그룹에 포함되는 새로운 쓰레드 그룹을 생성int activeCount()쓰레드 그룹에 포함된 활성상태에 있는 쓰레드의 수를 반환int activeGroupCount()쓰레드..
-
쓰레드의 우선순위공부/Java 2024. 5. 8. 12:37
쓰레드의 우선순위 - 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 해 특정 쓰레드가 더 많은 작업시간을 갖게 할 수 있다. 우선순위 지정하기void setPriority(int newPriority) 쓰레드의 우선순위를 지정한 값으로 변경한다.int getPriority() 쓰레드의 우선순위를 반환한다.public static final int MAX_PRIORITY = 10 // 최대우선순위public static final int MIN_PRIORITY = 1 // 최소우선순위public static final int NORM_PRIORITY = 5 // 보통우선순위쓰레드의 우선순위는 1~10 사이의 숫자로 지정한다. (JVM 기준)※ WinOS는 32단계로 나뉜다.기본적으로 보통 우선순위로 ..
-
싱글쓰레드와 멀티쓰레드공부/Java 2024. 5. 7. 17:01
싱글쓰레드와 멀티쓰레드 main 쓰레드- main 메서드의 코드를 수행하는 쓰레드- 쓰레드는 '사용자 쓰레드'와 '데몬 쓰레드' 두 종류가 있다.※ 데몬 쓰레드는 보조 쓰레드라고 생각하면 된다.- 실행 중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다. 싱글쓰레드- 하나의 쓰레드로 작업을 처리한다.- 싱글 코어에서 단순히 CPU만을 사용하는 계산 작업이라면 싱글쓰레로 프로그래밍하는 것이 더 효율적이다. 멀티쓰레드- 여러 개의 쓰레드로 작업을 처리한다.- 쓰레드 간 작업 전환(context switching)을 한다. 쓰레드의 I/O블락킹(blocking)※ I/O는 각각 Input(입력)과 Output(출력)을 의미한다.- 입/출력 시 작업이 중단된다.- 싱글쓰레드로 프로그래밍을 작성할 때 고..
-
쓰레드의 구현과 실행공부/Java 2024. 5. 6. 23:17
쓰레드의 구현과 실행 쓰레드를 구현하는 데 두가지 방법이 있다.※ 어느 쪽을 선택해도 별 차이는 없다.1. Thread 클래스 상속class MyThread extends Thread { public void run() { /* 작업 내용 */ } // Thread 클래스의 run() 오버라이딩} 쓰레드 실행MyThread t1 = new MyThread(); //쓰레드 생성t1.start(); //쓰레드 실행 2. Runnable 인터페이스 구현class MyThread2 implements Runnable { public void run() { /* 작업내용 */ } // Runnable 인터페이스의 run() 구현} 쓰레드 실행Runnable r = new MyThread2();Thread t2..
-
프로세스와 쓰레드공부/Java 2024. 5. 4. 19:30
프로세스와 쓰레드 프로세스(process)- 실행 중인 프로그램- 자원(resources)(메모리, CPU 등)과 쓰레드로 구성 쓰레드(thread)- 프로세스 내에서 실제 작업을 수행- 모든 프로세스는 최소 하나의 쓰레드를 가진다.※ 프로세스는 공장, 쓰레드는 일꾼이라고 생각하면 쉽다. 싱글 쓰레드 프로세스자원 + 한 개의 쓰레드 멀티 쓰레드 프로세스자원 + 여러 개의 쓰레드장점단점- 시스템 자원을 보다 효율적으로 사용할 수 있다.- 사용자에 대한 응답성(responseness)이 향상된다.- 작업이 분리되어 코드가 간결해진다. - 동기화(synchronization)에 주의해야 한다.- 교착상태(dead-lock)가 발생하지 않도록 주의해야 한다.- 각 쓰레드가 효율적으로 고르게 실행될 수 있게 해..
-
애너테이션 타입 정의하기공부/Java 2024. 5. 3. 23:05
애너테이션 타입 정의하기 - 애너테이션을 직접 만들어 쓸 수 있다.사용 방법@interface 애너테이션이름 { 타입 요소이름(); // 애너테이션의 요소를 선언한다.} - 애너테이션의 메서드는 추상 메서드이며, '애너테이션의 요소'라고 한다.- 애너테이션을 적용할 때 요소들의 값을 지정하며 요소의 이름을 같이 적어주므로 순서는 상관 없다.- 요소로 자신이 아닌 애너테이션을 포함할 수 있다. - 요소 적용시 값을 지정하지 않으면, 사용될 수 있는 기본값을 지정할 수 있다.@interface TestInfo{ int count() defalut 1; //기본값을 1로 지정}@Tesrinfo //@TestInfo(count = 1)과 동일public class NewClass{ ...
-
메타 애너테이션공부/Java 2024. 5. 2. 11:35
메타 애너테이션 - 메타 애너테이션은 '애너테이션을 위한 애너테이션'이다.- 애너테이션을 만들 때 사용한다.- 메타 애너테이션은 java.lang.annotation 패키지에 포함된다.애너테이션설명@Target애너테이션이 적용가능한 대상을 지정하는데 사용한다.@Documented애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 한다.@Inherited애너테이션이 저손 클래스에 상속되도록 한다.@Retention애너테이션이 유지되는 범위를 지정하는데 사용한다.@Repeatable애너테이션을 반복해서 적용할 수 있게 한다. (JDK1.8) @Target- 애너테이션을 정의할 때, 적용대상 지정에 사용한다.- 여러 개의 값을 지정할 때는 @Target({대상 타입, 대상 타입, ...}) 괄호 형태..