Java에서 스레드가 어떤 단계에 있는지 알려주는 것이다
자바 스레드의 6가지 상태
| 상태 | 설명 |
| NEW | 스레드가 생성되었으나 아직 시작되지 않은 상태 start()메서드 호출 전 |
| RUNNABLE | 스레드가 실행 중이거나 실행될 준비가 된 상태 (실행가능한 상태) |
| BLOCKED | 자원을 기다리고 있는 상태 (다른 스레드가 자원을 점유 중) |
| WAITING | 다른 스레드의 신호를 기다리며 무기한 대기 중인 상태 |
| TIMED_WAITING | 일정 시간 동안 대기 중인 상태 (예: sleep(), wait(시간)) |
| TERMINATED | 스레드가 종료된 상태 (작업 완료 또는 예외 발생) |
메서드가 스레드 상태에 어떻게 영향을 미치는지 더 명확하게 이해할 수 있습니다.
메서드설명상태 변화구분
| 구분 | 메소드 | 설명 | |
| 일시 정지로 보냄 |
sleep(long millis) | 스레드를 지정된 시간만큼 멈추게 함. 시간이 지나면 자동으로 깨어나서 다시 실행 가능 상태로 돌아감. | RUNNABLE → TIMED_WAITING |
| join() | 현재 스레드가 다른 스레드의 종료를 기다림. 대상 스레드가 종료될 때까지 현재 스레드는 대기 상태가 됨. | RUNNABLE → WAITING | |
| wait() | 스레드가 특정 객체의 모니터 락을 놓고 대기 상태에 들어감. notify()나 notifyAll() 호출을 통해서만 깨어남. | RUNNABLE → WAITING | |
| 일시정지에서벗어남 |
interrupt() | 대기 상태 또는 실행 중인 스레드에게 인터럽트를 발생시킴. sleep(), wait(), join() 상태에서 사용되면 예외 발생으로 깨움. | TIMED_WAITING / WAITING → RUNNABLE |
| notify() | 객체의 모니터 락을 사용 중인 스레드를 깨워서 WAITING 상태의 스레드 중 하나를 RUNNABLE 상태로 만듦. | WAITING → RUNNABLE | |
| notifyAll() | 객체의 모니터 락을 사용 중인 스레드를 깨워서 WAITING 상태의 모든 스레드를 RUNNABLE 상태로 만듦. | WAITING → RUNNABLE | |
| 실행 대기로 보냄 | yield() | 현재 실행 중인 스레드가 CPU 자원을 양보하고, 다른 스레드에게 실행 기회를 줌. RUNNABLE 상태의 다른 스레드가 없으면 다시 실행됨. | RUNNABLE (상태 변경 없음) |
- 일시 정지로 보냄: sleep(), join(), wait()는 스레드를 일시 정지 상태로 만들어 스레드가 일시적으로 실행을 멈추게 한다
- 일시 정지에서 벗어남: interrupt(), notify(), notifyAll()은 일시 정지 상태에 있는 스레드를 다시 RUNNABLE 상태로 만들어 대기 상태에서 벗어나게 한다
- 실행 대기로 보냄: yield()는 현재 실행 중인 스레드를 RUNNABLE 상태로 다시 전환하여, 다른 스레드가 실행될 수 있는 기회를 준다
'Java' 카테고리의 다른 글
| Java_스레드의 안전종료 (0) | 2024.10.17 |
|---|---|
| Java_Wait() notify() 이용한 스레드 제어 (1) | 2024.10.17 |
| Java_스레드 이름 (0) | 2024.10.17 |
| Java_메인 스레드 (1) | 2024.10.17 |
| Java_멀티 스레드와 멀티 프로세스의 차이 (0) | 2024.10.17 |