스레드는 생성부터 종료까지 여러 상태 값들을 가집니다.
스레드는 크게 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의 대상 스레드의 종료를 기다렸다가 다시 진행상태가 된다. |
'Java > 기초' 카테고리의 다른 글
[Java] 이클립스 설치방법 - JDK 1.7 설치, Eclipse Luna 설치 (0) | 2019.08.23 |
---|---|
[Java] String .split(".")결과가 공백이 나올 때 해결방법 (1) | 2019.08.21 |
[java] 스레드(Thread)[3] - 스레드 우선순위를 설정하는 방법 (0) | 2019.07.27 |
[java] 스레드(Thread)[2] - Runnable을 이용하여 구현하는 방법 (0) | 2019.07.27 |
[java] 스레드(Thread)[1] - run()과 start()의 차이 (2) | 2019.07.27 |
댓글