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

+ Recent posts