스레드의 상태는 getState()메서드를 통해 확인할 수 있다.
NEW 스레드가 생성됨. start()가 호출되지않은 상태
RUNNABLE 실행 중 또는 실행가능한 상태
BLOCKED 동기화블럭에의 의해 일시정지된 상태
WAITING 작업이 종료되지는 않았으나 일시정지상태
TIMED_WAITING 작업이 종료되지는 않았으나 일시정지상태 + 일시정지시간이 지정된 경우
TERMINATED 작업이 종료된 상태
두 개의 스레드를 생성하고,
스레드의 상태를 확인하여 그에 맞는 동작을 수행하는 방법이다.
public class ThreadStateExample {
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Thread thread2 = new Thread(() -> {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
thread1.start();
thread2.start();
// 스레드 상태 확인 및 처리
while (true) {
Thread.State state1 = thread1.getState();
Thread.State state2 = thread2.getState();
System.out.println("Thread 1 state: " + state1);
System.out.println("Thread 2 state: " + state2);
if (state1 == Thread.State.TERMINATED && state2 == Thread.State.TERMINATED) {
System.out.println("Both threads have terminated.");
break;
}
// 스레드가 종료되기를 기다림
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Main thread exiting...");
}
}
'JAVA' 카테고리의 다른 글
synchronized 를 이용한 스레드의 동기화 (0) | 2024.02.26 |
---|---|
스레드의 스케줄링/실행제어, 스레드의 상태를 지정하다. (0) | 2024.02.26 |
로그 파일을 주기적으로 청소하기, 데몬 스레드의 구현과 실행 (0) | 2024.02.26 |
보안상의 이유로 도입된 스레드 그룹: 서로 관련된 스레드를 그룹으로! (0) | 2024.02.26 |
스레드의 우선순위 setPriority() (0) | 2024.02.19 |