Java

Java_스레드 상태

ssmm95 2024. 10. 17. 11:54

Java에서 스레드가 어떤 단계에 있는지 알려주는 것이다 

 

자바 스레드의 6가지 상태 

 

상태 설명
NEW 스레드가 생성되었으나 아직 시작되지 않은 상태
start()메서드 호출 전
RUNNABLE 스레드가 실행 중이거나 실행될 준비가 된 상태 (실행가능한 상태)
BLOCKED 자원을 기다리고 있는 상태 (다른 스레드가 자원을 점유 중)
WAITING 다른 스레드의 신호를 기다리며 무기한 대기 중인 상태
TIMED_WAITING 일정 시간 동안 대기 중인 상태 (예: sleep(), wait(시간))
TERMINATED 스레드가 종료된 상태 (작업 완료 또는 예외 발생)

 

메서드가 스레드 상태에 어떻게 영향을 미치는지 더 명확하게 이해할 수 있습니다.

메서드설명상태 변화구분

구분 메소드 설명  
일시 정지로 보냄


sleep(long millis) 스레드를 지정된 시간만큼 멈추게 함. 시간이 지나면 자동으로 깨어나서 다시 실행 가능 상태로 돌아감. RUNNABLETIMED_WAITING
join() 현재 스레드가 다른 스레드의 종료를 기다림. 대상 스레드가 종료될 때까지 현재 스레드는 대기 상태가 됨. RUNNABLEWAITING
wait() 스레드가 특정 객체의 모니터 락을 놓고 대기 상태에 들어감. notify()나 notifyAll() 호출을 통해서만 깨어남. RUNNABLEWAITING
일시정지에서벗어남


interrupt() 대기 상태 또는 실행 중인 스레드에게 인터럽트를 발생시킴. sleep(), wait(), join() 상태에서 사용되면 예외 발생으로 깨움. TIMED_WAITING / WAITINGRUNNABLE
notify() 객체의 모니터 락을 사용 중인 스레드를 깨워서 WAITING 상태의 스레드 중 하나를 RUNNABLE 상태로 만듦. WAITINGRUNNABLE
notifyAll() 객체의 모니터 락을 사용 중인 스레드를 깨워서 WAITING 상태의 모든 스레드를 RUNNABLE 상태로 만듦. WAITINGRUNNABLE
실행 대기로 보냄 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