Java / Spring

스레드의 생명 주기 (+Thread State) 본문

Java

스레드의 생명 주기 (+Thread State)

밍구밍구밍 2024. 8. 17. 19:48

Thread State 에서 차단, 대기, 시간 제한 대기 상태는 스케줄러에 들어가지 않은 상태들이다.

1) New (새로운 상태)

스레드가 생성되고 아직 시작 되지 않은 상태이며 Thread 객체는 생성 되었지만 start() 메서드가 실행되지 않은 상태

 

2) Runnable (실행 가능 상태)

스레드가 실행될 준비가 된 상태 (실제 CPU 에서 실행될 수 있음)
start() 메서드가 호출되면 스레드는 이 상태로 들어간다 (ex : thread.start() )

(※ 참조 : Runnable 상태에 있는 모든 스레드가 동시에 실행 되는 것은 아니다. OS 의 스케줄러가 각 스레드에 CPU 시간을 할당하여 실행, Runnable 상태에 있는 스레드는 스케줄러의 실행 대기열에 포함되어 있다가 차례로 CPU 에서 실행된다.)

실제 스케줄러에서 실행중인 스레드나 실행 대기중인 상태도 모두 실행 상태라고 한다 (자바에서는 둘을 구분할 수 없음)

3) Blocked (차단 상태)

스레드가 다른 스레드에 의해 동기화 락을 얻기 위해 기다리는 상태이다

synchronized (lock) {} 상태에서 코드 블록에 진입하려고 할 때, 다른 스레드가 이미 lock 의 락을 가지고 있는 경우

 

4) Waiting (대기 상태)

스레드가 다른 스레드의 특정 작업이 완료되기를 무기한 기다리는 상태

wait(), join() 메서드가 호출 될 때 이 상태가 된다.

스레드는 다른 스레드가 notify() 또는 notifyAll() 메서드를 호출하거나, join() 이 완료될 때까지 기다린다.

 

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

스레드가 특정 시간 동안 다른 스레드의 작업이 완료 되기를 기다리는 상태이다.

sleep(long millis), wait(long timeout), join(long millis) 메서드가 호출될 때 이 상태가 된다.

주어진 시간이 경과하거나 다른 스레드가 해당 스레드를 깨우면 이 상태에서 벗어난다.

 

6) Terminated (종료 상태)

스레드의 실행이 완료된 상태

스레드가 정상적으로 종료되거나, 예외가 발생하여 종료된 경우 이 상태로 들어간다

스레드는 한 번 종료되면 다시 시작할 수 없다.