1. NEW: 쓰레드 객체가 생성되고 아직 start()를 호출하지 않은 상태
- start()가 호출하고 쓰레드의 실행할 수 있는 환경이 만들어지면 ~
2. RUNNABLE : 쓰레드의 실행 대기 ~ 실행 중 상태
3. BLOCKED : 동기화 블럭에 의해서 일시정지된 상태(lock풀리기 전)
4. WAITING / TIMED_WAITING : 일시정지 상태. 쓰레드 상태가 종료되지 않았지만 실행 가능하지 않은 상태
(sleep , join 등)
5. TERMINATED : 쓰레드의 작업이 종료된 상태
※ 교착상태 : 서로 다른 두 개의 프로세스가 실행하지 않고 서로의 작업을 끝나기를 기다리고 있어서 마치 프로그램이 종료된것 처럼 보이는 상태.
▶ 쓰레드 상태확인하는 법
Thread.State (열거 상수)
.getState() 메서드 이용(열거형)
// 무언가를 실행하는 쓰레드(쓰레드 상태검사)
class TargetThread extends Thread{
@Override
public void run() {
// 시간지연용
for (long i = 1L; i <= 20_000_000_000L; i++);
try { // 1.5초마다 진행
Thread.sleep(1500);
} catch (InterruptedException e) { }
for (long i = 1L; i <= 20_000_000_000L; i++);
}
}
--------------------------------------------------------
//쓰레드의 상태를 출력하는 쓰레드
class StatePrintThread extends Thread{
private TargetThread target;
public StatePrintThread(TargetThread target) {
this.target = target;
}
@Override
public void run() {
while (true) {
//Thread.State 열거형 => .getState()
Thread.State state = target.getState();
System.out.println("Target쓰레드의 현재 상태 : " + state);
if(state == Thread.State.NEW) {
// 쓰레드의 상태가 NEW라면
//NEW = 객체는 생성하고 start()하지 않은 상태
target.start();
}
if(state == Thread.State.TERMINATED) {
// 쓰레드의 상태가 TERMINATED = 종료
break; // while문 종료
}
try {
Thread.sleep(500);
} catch (InterruptedException e) { }
} // while
}
}
----------------------------------------------------
- main -
public class Th11 {
public static void main(String[] args) {
// 쓰레드 상태를 출력하는 쓰레드 객체 생성
Thread th1 = new StatePrintThread(new TargetThread());
th1.start();
}
}
'고급JAVA' 카테고리의 다른 글
Log4J (0) | 2023.01.17 |
---|---|
MVC 패턴과 싱글톤(Singleton) 패턴 (0) | 2023.01.11 |
쓰레드 공부-03 : 쓰레드의 실행제어 (0) | 2022.12.27 |
쓰레드 공부-02 (1) | 2022.12.26 |
쓰레드 공부-01 (0) | 2022.12.22 |