线程状态
Thread.State
public static enum Thread.State extends Enum<Thread.State>
A thread state. A thread can be in one of the following states:
NEW
A thread that has not yet started is in this state. (线程的初始状态,线程对象已被构建,但还没有开始运行)RUNNABLE
A thread executing in the Java virtual machine is in this state.(运行状态:start()`方法被调用,但线程可能处于就绪(等待被调度)或正占用着CPU在运行。BLOCKED
A thread that is blocked waiting for a monitor lock is in this state.(线程在进入同步块或获取监视器锁前的等待状态)WAITING
A thread that is waiting indefinitely for another thread to a particular action is in this state.(线程之前持有监视器锁,并正在临界区执行,在锁上调用wait()
方法后,等待其它线程唤醒的状态)TIMED_WAITING
A thread that is waiting for another thread to perform an action up to a specified waiting time is in this state.(超时等待,线程的在此执行并不完全取决于其它线程的唤醒,当达到超时时间后,自行恢复)TERMINATED
A thread that has exited is in this state.(终止状态,该线程已经死亡或工作已经完成)
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
通过_VisualVM_监控某个时刻的线程运行状况:
2016-10-11 22:08:13
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.101-b13 mixed mode):
"00000BlockingThread-2" #14 prio=5 os_prio=0 tid=0x0000000018b4d800 nid=0x2494 waiting for monitor entry [0x000000001ad1f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at thread.ThreadState$Blocked.run(ThreadState.java:45)
- waiting to lock <0x00000000d5e5f050> (a java.lang.Class for thread.ThreadState$Blocked)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"00000BlockingThread-1" #13 prio=5 os_prio=0 tid=0x0000000018b49000 nid=0x1f54 waiting on condition [0x000000001ae5f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at java.lang.Thread.sleep(Unknown Source)
at java.util.concurrent.TimeUnit.sleep(Unknown Source)
at thread.SleepUtils.second(SleepUtils.java:8)
at thread.ThreadState$Blocked.run(ThreadState.java:45)
- locked <0x00000000d5e5f050> (a java.lang.Class for thread.ThreadState$Blocked)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"00000WaitingThread" #12 prio=5 os_prio=0 tid=0x0000000018b48800 nid=0x1210 in Object.wait() [0x000000001aa7f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000d5e5d790> (a java.lang.Class for thread.ThreadState$Waiting)
at java.lang.Object.wait(Unknown Source)
at thread.ThreadState$Waiting.run(ThreadState.java:29)
- locked <0x00000000d5e5d790> (a java.lang.Class for thread.ThreadState$Waiting)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"00000TimeWaitingThread" #11 prio=5 os_prio=0 tid=0x0000000018b45800 nid=0xd44 waiting on condition [0x000000001a08e000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at java.lang.Thread.sleep(Unknown Source)
at java.util.concurrent.TimeUnit.sleep(Unknown Source)
at thread.SleepUtils.second(SleepUtils.java:8)
at thread.ThreadState$TimeWaiting.run(ThreadState.java:16)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"Service Thread" #10 daemon prio=9 os_prio=0 tid=0x0000000018adf800 nid=0x238c runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"C1 CompilerThread3" #9 daemon prio=9 os_prio=2 tid=0x0000000018a3b000 nid=0x2528 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x0000000018a28000 nid=0x2254 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Finalizer" #3 daemon prio=8 os_prio=1 tid=0x000000001795f800 nid=0x2434 in Object.wait() [0x0000000019acf000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000d5d08ee0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x00000000d5d08ee0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
Locked ownable synchronizers:
- None
"VM Thread" os_prio=2 tid=0x0000000017951800 nid=0x2748 runnable
"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x000000000232c800 nid=0x2350 runnable
"VM Periodic Task Thread" os_prio=2 tid=0x0000000018b35800 nid=0x1448 waiting on condition
JNI global references: 349