본문 바로가기
Java/기초

[java] 스레드(Thread)[4] - 스레드의 상태(state) 제어

by EricJeong 2019. 7. 27.

스레드는 생성부터 종료까지 여러 상태 값들을 가집니다.

 

스레드는 크게 4가지의 상태를 가집니다.

 

 

스레드의 상태

1. ready state : start() 메서드 호출부터 스케줄러가 run() 메서드를 시작하기까지의 상태입니다.

 

2. run state : 스레드가 ready state이고, 스케줄러가 run() 메서드를 실행시키면 해당 스레드는    run state 상태가 됩니다.

 

3. non-runnable state : run state상태인 스레드가 동작을 일시 정지한 상태입니다. non-runnable state에는 3가지의 상태(wating, sleeping, blocked)가 있습니다

 

3-1 : wating state : synchronized 메서드나 synchronized 블록에 의해 스레드가 wait() 메서드를 호출하여 일시 정지된 상태입니다.

 

3-2 : sleeping state : Thread.sleep() 메서드의 실행으로 인해 일정 시간동안 동작이 정지된 상태입니다. 지정된 시간이 지나면 스레드는 ready state로 복귀합니다.

 

3-3 : blocked state : IO관련 상태 또는 synchronized를 통해 스레드 진행이 정지된 상태입니다. 스레드를 정지시킨 원인이 사라지면 스레드는 ready state로 복귀합니다.

 

4. done state : 스레드의 run()메섣가 종료된 상태입니다. 한번 done state가 된다면 그 스레드는 더이상 run state로 복귀할 수 없습니다.

 

run state인 스레드가 non-runnable state가 되었다면, 그 스레드는 바로 run state로 복귀하지 않고 스케줄러의 실행을 대기하는 ready state로 복귀하는 특징이 있습니다.

 

 

스레드에는 이러한 상태를 제어할 수 있는 메서드들이 존재합니다.

 

스레드 상태 제어 메서드

start() : 스레드를 ready state로 만들어 스케줄러에 의해 선택 되기를 대기하는 상태로 만듦

 

run() : 쓰레드가 작업할 로직을 구성하는 메서드.

 

yield() : 다른 스레드에게 우선 작업을 양보하는 메서드. 이 메서드가 호출되면 non_runnable state - wating state가 되고, 양보한 스레드의 실행이 종료되면 다시 ready state로 복귀.

 

sleep() : 지정된 시간동안 스레드를 non_runnable state - sleep state로 만든 후 지정된 시간이 만료되면 다시 ready state로 복귀시킴.

 

join() : 특정 스레드의 실행이 완전히 종료되도록 설정. 이 메서드를 사용하면 호출한 스레드는 join의 대상 스레드의 종료를 기다렸다가 다시 진행상태가 된다.

 

 

 

 

 

댓글