< "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를 참고하자
'네트워크 프로그래밍 > Thread' 카테고리의 다른 글
[박혜웅] Java Stack Trace (0) | 2011.12.02 |
---|---|
[박혜웅] Java Default Threads in Java VisualVM (0) | 2011.11.30 |
[박혜웅] Context Switching, Multi Process, Multi Thread (0) | 2011.11.15 |