스레드 상태에서부터는 내용이 다소 복잡해집니다. 스레드의 실행 과정은 간단해 보였지만(run 메서드 실행), 이 과정에서는 복잡한 상태 변동이 일어나기 때문이죠. 차근차근 짚어나가 보겠습니다.
- 기본적으로 하나의 스레드 객체가 생성이 되면(NEW 상태)
- 스케줄링이 아직 되지 않았기 때문에 실행 대기 상태로 전환됩니다(RUNNABLE).
- 스케줄링이 되면 CPU 점유 후 run( )을 실행합니다(RUNNING).
- RUNNING 상태에서는 run( ) 메서드를 모두 실행하기 전에 스케줄링에 의해
실행 대기 상태로 돌아가 다른 스레드가 실행 상태로 변합니다.
> 이렇게 번갈아가며 스레드는 실행과 실행 대기를 오가며 자신의 run( )을 조금씩 실행합니다.
- 실행 상태에서 run( ) 메서드가 종료되면 더 실행할 코드가 없기에
스레드 실행은 멈추고 종료상태가 됩니다(TERMINATED).
- 단, 실행 상태에서 실행 대기 상태로 바로 이동하지 않고 일시 정지 상태로 가기도 합니다.
> 일시 정지 상태에서는 스레드가 실행할 수 없는 상태가 됩니다.
> WAITING, TIMED_WAITING, BLOCKED 상태가 존재합니다(추후 별도 설명)
> 일시 정지 상태에서 실행을 하기 위에서는 반드시 실행 대기(RUNNABLE) 상태로 이동 후 실행 해야 합니다.
위에서 여러가지 스레드의 상태를 언급했는데요, 이러한 상태는 Thread클래스의 메서드인 getState( ) 메서드로 확인이 가능합니다. 이 메서드를 사용하면 Thread.State 타입의 열거 상수가 리턴됩니다.
상태 | 열거 상수 | 설명 |
객체 생성 | NEW | 스레드 객체는 생성 되었으나, 아직 start( ) 메서드가 호출되지 않은 상황 |
실행 대기 | RUNNABLE | 실행 상태로 언제든지 갈 수 있는 상태 |
일시 정지 | WAITING | 다른 스레드가 통지할 때까지 기다리는 상태 |
TIMED_WAITING | 주어진 시간 동안 기다리는 상태 | |
BLOCKED | 사용하고자 하는 객체의 락이 풀릴 때까지 기다리는 상태 | |
종료 | TERMINATED | 실행을 마친 상태 |
'Programming > JAVA' 카테고리의 다른 글
멀티 스레드(6) - 스레드 상태 제어 1 (0) | 2024.11.24 |
---|---|
멀티 스레드(5) - 스레드 상태 2 (2) | 2024.11.20 |
멀티 스레드(4) - 동기화 메서드와 동기화 블록 3 (0) | 2024.11.18 |
멀티 스레드(4) - 동기화 메서드와 동기화 블록 2 (3) | 2024.11.14 |
멀티 스레드(4) - 동기화 메서드와 동기화 블록 1 (0) | 2024.11.11 |