如何匹配理论线程状态和jvisualvm显示的状态
How to match theoretical thread states and states showed by jvisualvm
如果我们将 google 类似 'java thread state' 的东西,我们将看到大致如下图:
但是如果我们打开 jVisualVm,我们将看到以下内容:
你能帮忙配一下这些图吗?
睡眠状态就Thread.sleep()
? 运行 的特例?
公园州是什么?(我试过google但我很困惑,因为我之前只知道第一张图)
公园是
sun.misc.Unsafe.park()
图表表示 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
块)。
如果我们将 google 类似 'java thread state' 的东西,我们将看到大致如下图:
但是如果我们打开 jVisualVm,我们将看到以下内容:
你能帮忙配一下这些图吗?
睡眠状态就Thread.sleep()
? 运行 的特例?
公园州是什么?(我试过google但我很困惑,因为我之前只知道第一张图)
公园是
sun.misc.Unsafe.park()
图表表示 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
块)。