[java] 쓰레드 상태(State)와 상태 전이(State Transition)
Java에서 쓰레드는 여러 상태를 가질 수 있습니다. 쓰레드의 상태(State)와 상태 전이(State Transition)에 대해 알아봅시다.
쓰레드의 상태(State)
쓰레드는 다음과 같은 여러 상태를 가질 수 있습니다.
- NEW : 쓰레드 객체가 생성되었지만 아직
start()
메서드가 호출되지 않은 상태 - RUNNABLE : 실행 가능한 상태로, 실행을 위해 기다리고 있는 상태
- BLOCKED : 동기화 블록에서 동기화 lock을 기다리고 있는 상태
- WAITING : 다른 쓰레드가 특정 조건을 만족할 때까지 기다리고 있는 상태
- TIMED_WAITING : 일정시간 동안 기다리고 있는 상태
- TERMINATED : 실행이 완료되었거나 종료된 상태
쓰레드 상태 전이(State Transition)
쓰레드는 여러 이유로 상태 전이를 할 수 있습니다.
- NEW -> RUNNABLE :
start()
메서드가 호출되면 NEW 상태의 쓰레드는 RUNNABLE 상태로 전이합니다. - RUNNABLE -> RUNNING : 스케줄러에 의해 선택되어 실행 중인 상태
- RUNNING -> BLOCKED : 동기화 블록에서 lock을 얻지 못했거나
wait()
메서드 호출 시 - RUNNING -> WAITING :
Object.wait()
메서드 호출 시 - RUNNING -> TIMED_WAITING :
Thread.sleep()
또는Object.wait(timeout)
메서드 호출 시 - RUNNING -> TERMINATED :
run()
메서드가 종료되면 쓰레드는 TERMINATED 상태가 됩니다.
자바에서 쓰레드의 상태와 상태 전이에 대한 이해는 멀티쓰레드 프로그래밍 시 중요한 요소입니다.
참고 자료: Oracle Java Documentation