如果我们要google类似于' java线程状态'我们将看到大约这个图:
但是如果我们打开jVisualVm,我们会看到以下内容:
你能帮忙修补这些图吗?
睡眠状态只是Thread.sleep()
?跑步的特例?
Park的状态是什么?(我试图谷歌,但我很困惑,因为我之前只知道第一张图)
答案 0 :(得分:1)
park是
sun.misc.Unsafe.park()
答案 1 :(得分:1)
该图表示java.lang.Thread.State
枚举。 The Javadoc is quite helpful to get an understanding of the mapping you seek
JVisualVM状态表示您将在线程转储中看到的额外状态描述,例如:
"Finalizer" daemon prio=8 tid=0x022f4000 nid=0xd14 in Object.wait() [0x044cf000]
java.lang.Thread.State: WAITING (on object monitor)
因此,如果您获得线程转储并通过线程名称比较JVisualVM和线程转储的状态,那么您可以自己解密状态。
以下是您想要的映射:
Running
- > java.lang.Thread.State: RUNNABLE
Sleeping
- > java.lang.Thread.State: TIMED_WAITING (sleeping)
Wait
- > java.lang.Thread.State: WAITING TIMED_WAITING (on object monitor)
Park
- > java.lang.Thread.State: WAITING TIMED_WAITING (parking)
Monitor
- > java.lang.Thread.State: BLOCKED (on object monitor)
Park
州是WAITING
或TIMED_WAITING
的特例。与Wait
的区别在于Wait
在对象监视器上发生(即Object.wait()
块内的synchronized
。另一方面,Park
通过Unsafe.park
从调度中删除线程,而无需持有监视器(即它不需要synchronized
块)。