본문 바로가기

네트워크 프로그래밍/Thread

[박혜웅] Java Thread States


< "Java 언어로 배우는 디자인 패턴 입문" 70페이지에서 발췌 >

NEW : 쓰레드가 시작되지 않은 상태
모리 상에 스레드 객체만 생성된 상태. new Thread()만 하고, Thread.start() 호출 이전 상태.
Stack Trace(Thread Dump)로 잡히지 않음
 

RUNNABLE : JVM에서 쓰레드가 동작중인 상태
"실행가능"상태였다가 CPU에 의해서 수행되는 동안 "실행상태"가 됨.
Java에서는 "실행가능", "실행상태" 모두 "RUNNABLE"로 표시함
Thread.yield()를 호출하여 스레드가 자발적으로 "실행가능"상태로 양보할 수 있음.
 

BLOCKED : block되어 monitor lock을 기다리는 상태
synchronized블럭이나 I/O처리 등으로 인해 lock이 풀리기를 기다리는 상태. 


WAITING
 : 다른쓰레드가 특정한 행위를 수행할때까지 기약없이 대기하는 상태. 

Object.wait(), Thread.join() Thread.sleep() 등에 의해 대기하는 상태.
Object.notify(), Object.notifyAll(), Thread.interrupt()에 의해 RUNNABLE로 변경 가능.

TIMED_WAITING
 : 다른쓰레드가 특정한 행위를 수행할때까지 약속된 시간까지 대기하는 상태.

Object.wait(), Thread.join() Thread.sleep() 등에 의해 대기하는 상태.
Object.notify(), Object.notifyAll(), Thread.interrupt()에 의해 RUNNABLE로 변경 가능.
 
 
TERMINATED
 : 쓰레드가 종료된 상태.
Thread.run()이 종료된 상태.
Stack Trace(Thread Dump)로 잡히지 않음

CPU Scheduling: OS가 CPU 리소스를 스레드(프로세스)에게 일정시간 할당해줌.
스레드의 여러 상태중, CPU Scheduling이 되는 경우는 RUNNABLE 뿐이다.
 

좀 더 자세한 설명은 아래 PPT를 참고하자