Java VisualVM-线程状态
有人能解释一下VisualVM中Java VisualVM-线程状态,java,jvm,visualvm,jvisualvm,Java,Jvm,Visualvm,Jvisualvm,有人能解释一下VisualVM中休眠、等待、驻车和监控线程状态之间的区别吗 这就是我发现的: 正在运行:线程仍在运行 休眠:线程正在休眠(对线程对象调用了方法yield()) Wait:线程被互斥锁或屏障阻止,正在等待另一个线程释放锁 停放:停放的线程将暂停,直到获得许可证。通常通过调用thread对象上的方法unpark()来完成线程的解压 监视器:线程正在等待条件变为true以恢复执行 我无法理解的是州立公园,到底是什么让这条线暂停了?如何在代码中检测是什么导致线程暂停执行 有人能在这方面
休眠
、等待
、驻车
和监控
线程状态之间的区别吗
这就是我发现的:
正在运行
:线程仍在运行休眠
:线程正在休眠(对线程对象调用了方法yield())Wait
:线程被互斥锁或屏障阻止,正在等待另一个线程释放锁停放
:停放的线程将暂停,直到获得许可证。通常通过调用thread对象上的方法unpark()来完成线程的解压监视器
:线程正在等待条件变为true以恢复执行
我无法理解的是州立公园,到底是什么让这条线暂停了?如何在代码中检测是什么导致线程暂停执行
有人能在这方面指导我吗
谢谢。我发现了一个非常好的图表,它几乎描述了您需要/想要知道的一切
- 线程。睡眠(睡眠时间)
- 对象。等待(超时)
- 线程连接(超时)
- LockSupport.Parknos(超时)
- 锁定支持。驻车直到(超时)
LockSupport的许可证与线程关联(即许可证被赋予特定线程),并且不会累积(即每个线程只能有一个许可证,当线程使用许可证时,许可证就会消失)。VisualVM将Java线程状态(如@Maciej的回答中所述)映射到其UI中显示的状态,如下所示:
BLOCKED -> Monitor
RUNNABLE -> Running
WAITING/TIMED_WAITING -> Sleeping/Park/Wait (see below)
TERMINATED/NEW -> Zombie
睡眠
和停车
是(定时)等待的具体情况:
Sleeping: specifically waiting in Thread.sleep().
Park: specifically waiting in sun.misc.Unsafe.park() (presumably via LockSupport).
(映射在threadmxbeandamanager.java
中执行)
可以找到关于Java线程状态的简短(非权威)讨论
编辑以添加:
还值得注意的是,调用本机方法时阻塞的线程在JVM中显示为
RUNNABLE
,因此VisualVM报告为Running
(并消耗100%的CPU)。感谢您的回复。我也经历了这些,但不知何故,我的问题仍然没有得到回答。你能把我的问题再重复一遍吗;我已经更新了。我特别地寻找一个答案w.r.t.公园州。再次感谢更新。因此,在park状态下,线程是在等待调度,还是在等待某个条件?@AliShahAhmed thread正在等待权限(条件)执行-如果在某个时间段内未满足此条件,则达到超时并终止线程-PS。抱歉,延迟回答hahaThis,这应该是正确答案。问题是关于JVisualVM线程状态,而不是JVM线程状态。您是否可以添加在调用本机方法时发现线程阻塞信息的引用?