Thread 쓰레드의 생명 주기를 알아보자

개발자 이상규·2024년 10월 4일

CS

목록 보기
1/3

Thread 상태

  • New: Thread가 생성되었으나 아직 시작되지 않은 상태
  • Runnable: Thread가 실행 중이거나 실행될 준비가 된 상태
  • 일시 중지된 상태들
    • Blocked: Thread가 동기화 Lock을 기다리는 상태
    • Waiting: Thread가 무기한으로 다른 Thread의 작업을 기다리는 상태
    • Time Waiting: Thread가 일정 시간 동안 다른 Thread의 작업을 기다리는 상태
  • Terminated: Thread의 실행이 완료된 상태

Java의 Thread의 생명 주기는 여러 state로 나뉘어지며, 각 상태는 Thread가 실행되고 종료되기까지의 과정을 나타냅니다.

Runnable (실행 가능 상태)

이 상태는 스레드가 실행될 준비가 되어 있음을 나타내며, 실제로 CPU에서 실행될 수 있는 상태이다.
그러나 Runnable 상태에 있는 모든 스레드가 동시에 실행되는 것은 아니다.
운영체제의 스케줄러가 각 스레드 에 CPU 시간을 할당하여 실행하기 때문에, Runnable 상태에 있는 스레드는 스케줄러의 실행 대기열에 포 함되어 있다가 차례로 CPU에서 실행된다.
참고로 운영체제 스케줄러의 실행 대기열에 있든, CPU에서 실제 실행되고 있든 모두 RUNNABLE 상태다. 자바에서 둘을 구분해서 확인할 수는 없다

Blocked (차단 상태)

스레드가 다른 스레드에 의해 동기화 락을 얻기 위해 기다리는 상태이다.
예를 들어, synchronized 블록에 진입하기 위해 락을 얻어야 하는 경우 이 상태에 들어간다.

Waiting (대기 상태)

스레드가 다른 스레드의 특정 작업이 완료되기를 무기한 기다리는 상태이다.
wait() , join() 메서드가 호출될 때 이 상태가 된다.
스레드는 다른 스레드가 notify() 또는 notifyAll() 메서드를 호출하거나, join() 이 완료될때까지 기다린다.

Timed Waiting (시간 제한 대기 상태)

스레드가 특정 시간 동안 다른 스레드의 작업이 완료되기를 기다리는 상태이다.
sleep(long millis) , wait(long timeout) , join(long millis) 메서드가 호출될 때 이 상태가 된다.
주어진 시간이 경과하거나 다른 스레드가 해당 스레드를 깨우면 이 상태에서 벗어난다.

Terminated (종료 상태)

스레드의 실행이 완료된 상태이다.
스레드가 정상적으로 종료되거나, 예외가 발생하여 종료된 경우 이 상태로 들어간다. 스레드는 한 번 종료되면 다시 시작할 수 없다.





Reference :

  • 김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
profile
Contact: leeeesanggyu@gmail.com

0개의 댓글