Ali*_*med 72 java jvm visualvm jvisualvm
有人可以解释我的区别Sleeping,Wait,Park,和Monitor线程状态中的VisualVM.

这是我发现的:
Running:线程仍在运行.
Sleeping:thread正在休眠(在线程对象上调用方法yield())
Wait:线程被互斥锁或屏障阻塞,并且正在等待另一个线程释放锁
Park:挂起的线程被暂停,直到它们被给予许可.取消停放线程通常是通过在线程对象上调用方法unpark()来完成的
Monitor:线程正在等待条件变为true以恢复执行
我无法理解的是州立公园,实际上是什么暂停线程?如何在代码中检测到什么使线程暂停执行?
有人可以在这方面指导我.
谢谢.
Mac*_*gan 48
我已经使用了谷歌,并且出现的第一页有一个非常好的图表,几乎描述了你需要/想要知道的所有内容.下次值得尝试谷歌这些类型的问题.

1)新的
如果您创建Thread类的实例但在调用start()方法之前,线程处于新状态.
2)Runnable
调用start()方法后,线程处于runnable状态,但线程调度程序尚未选择它作为正在运行的线程.
3)跑步
如果线程调度程序已选择它,则线程处于运行状态.
4)等待时间
定时等待是等待指定等待时间的线程的线程状态.由于在指定的正等待时间内调用以下方法之一,线程处于定时等待状态:
5)非可运行(被阻止)
这是线程仍处于活动状态但当前没有资格运行的状态.
6)终止
当run()方法退出时,线程处于已终止或死机状态.
希望这能回答你的问题:).
停车处:
除非许可证可用,否则禁用当前线程以进行线程调度.
如果您想以这种方式调用线程,则线程正在停止或暂停,因为它没有执行权限.授予权限后,线程将被取消并执行.
LockSupport的许可与线程相关联(即许可被赋予特定线程)并且不会累积(即每个线程只能有一个许可,当线程消耗许可时,它会消失).
Jer*_*emy 32
VisualVM将Java线程状态(如@ Maciej的答案中所述)映射到其UI中显示的状态,如下所示:
BLOCKED -> Monitor
RUNNABLE -> Running
WAITING/TIMED_WAITING -> Sleeping/Park/Wait (see below)
TERMINATED/NEW -> Zombie
Run Code Online (Sandbox Code Playgroud)
Sleeping并且Park是(定时)等待的具体情况:
Sleeping: specifically waiting in Thread.sleep().
Park: specifically waiting in sun.misc.Unsafe.park() (presumably via LockSupport).
Run Code Online (Sandbox Code Playgroud)
(映射在ThreadMXBeanDataManager.java.中执行.)
可以在此处找到有关Java线程状态的简短(和非权威)讨论.
编辑添加:
值得注意的是,在调用本机方法时阻塞的线程出现在JVM中RUNNABLE,因此由VisualVM报告为Running(并且消耗100%CPU).
| 归档时间: |
|
| 查看次数: |
26065 次 |
| 最近记录: |