[java] 스레드 상태(State)의 종류는?
NEW
: 스레드가 생성되었지만 아직start()
메서드가 호출되지 않은 초기 상태입니다.RUNNABLE
:start()
메서드가 호출되어 실행 준비가 된 상태입니다. 모든 스레드는 이 상태에서 실행됩니다.BLOCKED
: 스레드가 락(lock)을 얻기 위해 대기 중인 상태입니다. 다른 스레드가 해당 락을 소유하고 있을 때 발생합니다.WAITING
: 스레드가 특정 조건이 충족될 때까지 대기 중인 상태입니다. 다른 스레드가 특정 스레드의notify()
나notifyAll()
메서드를 호출할 때까지 기다리게 됩니다.TIMED_WAITING
:WAITING
상태와 유사하지만, 일정 시간동안만 대기하다가 자동으로 깨어나는 상태입니다. 이는Thread.sleep()
메서드나 동기화된 객체의wait(timeout)
메서드 호출로 발생합니다.TERMINATED
: 스레드의 실행이 완료되거나interrupt()
메서드를 통해 강제로 멈춘 상태입니다.
스레드 상태는 Thread
클래스의 getState()
메서드를 통해 확인할 수 있습니다. 또한, Thread.State
열거형을 이용하여 상태를 비교하거나 조건문에 활용할 수 있습니다.
예를 들어, 다음은 스레드 상태를 출력하는 예제 코드입니다:
Thread thread = new Thread(() -> {
// 스레드 실행 코드
});
thread.start();
Thread.State state = thread.getState();
System.out.println("스레드 상태: " + state);
참고 문서:
- Java API Documentation:
Thread
- Java Concurrency in Practice by Brian Goetz et al.