본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

getState(), 스레드의 상태 확인하기

스레드의 상태는 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...");
    }
}