Thread.State
java.lang.Thread.State enum
public enum Thread.State
/**
* A thread state. A thread can be in one of the following states:
* <ul>
* <li>{@link #NEW}<br>
* A thread that has not yet started is in this state.
* </li>
* <li>{@link #RUNNABLE}<br>
* A thread executing in the Java virtual machine is in this state.
* </li>
* <li>{@link #BLOCKED}<br>
* A thread that is blocked waiting for a monitor lock
* is in this state.
* </li>
* <li>{@link #WAITING}<br>
* A thread that is waiting indefinitely for another thread to
* perform a particular action is in this state.
* </li>
* <li>{@link #TIMED_WAITING}<br>
* A thread that is waiting for another thread to perform an action
* for up to a specified waiting time is in this state.
* </li>
* <li>{@link #TERMINATED}<br>
* A thread that has exited is in this state.
* </li>
* </ul>
*
* <p>
* A thread can be in only one state at a given point in time.
* These states are virtual machine states which do not reflect
* any operating system thread states.
*
* @since 1.5
* @see #getState
*/
public enum State {
스레드 상태. 하나의 스레드는 다음 중 하나의 상태를 가질 수 있습니다.
- NEW
- 아직 시작되지 않은 스레드의 상태.
- RUNNABLE
- 자바 가상 머신에서 실행중인 스레드의 상태.
- BLOCKED
- 모니터 잠금을 기다리며 블록된 스레드 상태.
- WAITING
- 다른 스레드가 특정 작업을 완료할 때까지 무기한으로 기다리고 있는 스레드 상태.
- TIMED_WAITING
- 지정한 대기 시간까지 다른 스레드가 특정 작업을 완료하기를 기다리는 스레드 상태.
- TERMINATED
- 종료된 스레드의 상태.
스레드는 한 번에 한 가지의 상태만 가질 수 있습니다. 위의 상태들은 가상 머신의 상태이며, OS의 스레드 상태를 반영하는 것이 아닙니다.
NEW
/**
* Thread state for a thread which has not yet started.
*/
NEW,
아직 시작되지 않은 스레드의 상태.
RUNNABLE
/**
* Thread state for a runnable thread. A thread in the runnable
* state is executing in the Java virtual machine but it may
* be waiting for other resources from the operating system
* such as processor.
*/
RUNNABLE,
실행 가능한 스레드의 상태.
RUNNABLE 상태의 스레드는 JVM에서 실행되고 있지만, 프로세서 같은 OS에서 제공하는 다른 리소스를 기다리고 있을 수 있습니다.
BLOCKED
/**
* Thread state for a thread blocked waiting for a monitor lock.
* A thread in the blocked state is waiting for a monitor lock
* to enter a synchronized block/method or
* reenter a synchronized block/method after calling
* {@link Object#wait() Object.wait}.
*/
BLOCKED,
모니터 잠금을 기다리며 블록된 스레드 상태.
BLOCKED 상태의 스레드는 synchronized 블록/메소드에 들어가거나,
Object.wait()
호출 이후 synchronized 블록/메소드에 다시 들어가기 위해 모니터 잠금을 기다리고 있습니다.
WAITING
/**
* Thread state for a waiting thread.
* A thread is in the waiting state due to calling one of the
* following methods:
* <ul>
* <li>{@link Object#wait() Object.wait} with no timeout</li>
* <li>{@link #join() Thread.join} with no timeout</li>
* <li>{@link LockSupport#park() LockSupport.park}</li>
* </ul>
*
* <p>A thread in the waiting state is waiting for another thread to
* perform a particular action.
*
* For example, a thread that has called {@code Object.wait()}
* on an object is waiting for another thread to call
* {@code Object.notify()} or {@code Object.notifyAll()} on
* that object. A thread that has called {@code Thread.join()}
* is waiting for a specified thread to terminate.
*/
WAITING,
대기중인 스레드 상태.
다음 메소드 중 하나를 호출한 스레드는 WAITING 상태가 됩니다.
Object.wait()
(타임아웃 없음)Thread.join()
(타임아웃 없음)LockSupport.park()
WAITING 상태의 스레드는 다른 스레드가 특정 작업을 완료할 때까지 기다리고 있습니다.
예를 들어, 어떤 object에 대해
Object.wait()
를 호출한 스레드는 다른 스레드가 해당 object에 대해Object.notify()
또는Object.notifyAll()
을 호출하기를 기다리고 있습니다.
Thread.join()
을 호출한 스레드는 지정된 스레드가 terminate될 때까지 기다리고 있습니다.
TIMED_WAITING
/**
* Thread state for a waiting thread with a specified waiting time.
* A thread is in the timed waiting state due to calling one of
* the following methods with a specified positive waiting time:
* <ul>
* <li>{@link #sleep Thread.sleep}</li>
* <li>{@link Object#wait(long) Object.wait} with timeout</li>
* <li>{@link #join(long) Thread.join} with timeout</li>
* <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>
* <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>
* </ul>
*/
TIMED_WAITING,
대기 시간이 지정된 대기중인 스레드의 상태.
양수값의 대기 시간을 지정하여 다음 메소드 중 하나를 호출한 스레드는 TIMED_WAITING 상태가 됩니다.
Thread.sleep(long)
Object.wait(long)
(타임아웃 있음)Thread.join(long)
(타임아웃 있음)LockSupport.parkNanos(Object, long)
LockSupport.parkUntil(Object, long)
TERMINATED
/**
* Thread state for a terminated thread.
* The thread has completed execution.
*/
TERMINATED;
종료된 스레드의 상태. 종료된 스레드는 실행이 완료된 스레드를 말합니다.