자바 스레드의 생명 주기는 여러 상태로 나뉘어진다.
NEW (새로운 상태)
- 스레드가 생성되고 아직 시작되지 않은 상태이다.
- 즉, 스레드 객체(Thread)가 생성되었지만, start() 메서드가 호출되지 않은 상태이다.
Runnable (실행 가능 상태)
- 스레드가 실행될 준비가 된 상태이다.
- start() 메서드가 호출되면 스레드가 Runnable 상태가 된다.
- CPU 코어 하나 당 한 번에 하나의 스레드만 실행이 가능하기 때문에 Runnable 상태의 스레드라고 해서 반드시 실행 중인 것은 아니다. Runnable 상태에 있는 스레드는 스케줄러의 실행 대기열에 포함되어 있다가 차례로 CPU에서 실행된다.
- 운영체제 스케줄러의 실행 대기열에 있든, CPU에서 실제 실행되고 있든 모두 Runnable 상태이다.
Blocked (차단 상태)
- 스레드가 동기화 락을 얻기 위해 기다리는 상태이다.
- 예를 들어, synchronized 블록에 진입하기 위해 락을 대기하는 상태이다.
Waiting (대기 상태)
- 스레드가 다른 스레드의 특정 작업이 완료되기를 무기한 기다리는 상태이다.
- wait(), join() 메서드 호출 시 이 상태가 된다.
- 스레드는 다른 스레드가 notify(), notifyAll() 메서드를 호출하거나, join()이 완료될 때까지 기다린다.
Time Waiting (시간 제한 대기 상태)
- 스레드가 특정 시간 동안 다른 스레드의 작업이 완료되기를 기다리는 상태이다.
- sleep(long millis), wait(long millis), join(long millis) 메서드가 호출될 때 이 상태가 된다.
- 주어진 시간이 경과되거나, 다른 스레드가 해당 스레드를 깨우면 이 상태에서 벗어난다.
Terminated (종료 상태)
- 스레드 실행이 완료된 상태이다.
- 스레드가 정상적으로 종료되거나, 예외가 발생하여 종료된 경우 Terminated 상태가 된다.
Reference
- 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
'Language > Java' 카테고리의 다른 글
인터럽트 (0) | 2024.10.14 |
---|---|
자바에서 자식 메서드가 부모 메서드가 던지는 체크 예외의 하위 타입만 던질 수 있는 이유 (0) | 2024.10.14 |
스레드 로컬(ThreadLocal) (0) | 2024.07.08 |
Comparable과 Comparator (1) | 2024.01.15 |
추상 클래스와 인터페이스 비교하기 (0) | 2024.01.14 |