Java VisualVM-线程状态

Java VisualVM-线程状态,java,jvm,visualvm,jvisualvm,Java,Jvm,Visualvm,Jvisualvm,有人能解释一下VisualVM中休眠、等待、驻车和监控线程状态之间的区别吗 这就是我发现的: 正在运行:线程仍在运行 休眠:线程正在休眠(对线程对象调用了方法yield()) Wait:线程被互斥锁或屏障阻止,正在等待另一个线程释放锁 停放:停放的线程将暂停,直到获得许可证。通常通过调用thread对象上的方法unpark()来完成线程的解压 监视器:线程正在等待条件变为true以恢复执行 我无法理解的是州立公园,到底是什么让这条线暂停了?如何在代码中检测是什么导致线程暂停执行 有人能在这方面

有人能解释一下VisualVM中
休眠
等待
驻车
监控
线程状态之间的区别吗

这就是我发现的:

正在运行
:线程仍在运行
休眠
:线程正在休眠(对线程对象调用了方法yield())
Wait
:线程被互斥锁或屏障阻止,正在等待另一个线程释放锁
停放
:停放的线程将暂停,直到获得许可证。通常通过调用thread对象上的方法unpark()来完成线程的解压
监视器
:线程正在等待条件变为true以恢复执行

我无法理解的是州立公园,到底是什么让这条线暂停了?如何在代码中检测是什么导致线程暂停执行

有人能在这方面指导我吗


谢谢。

我发现了一个非常好的图表,它几乎描述了您需要/想要知道的一切

  • 新的
  • 如果在调用start()方法之前创建thread类的实例,则线程处于新状态

  • 可运行
  • 调用start()方法后,线程处于可运行状态,但线程调度程序尚未将其选择为运行线程

  • 运行
  • 如果线程调度程序已选择该线程,则该线程处于运行状态

  • 定时等待
  • Timed waiting是具有指定等待时间的线程的线程状态。由于使用指定的正等待时间调用以下方法之一,线程处于定时等待状态:

    • 线程。睡眠(睡眠时间)
    • 对象。等待(超时)
    • 线程连接(超时)
    • LockSupport.Parknos(超时)
    • 锁定支持。驻车直到(超时)
  • 不可运行(阻塞)
  • 这是线程仍处于活动状态,但当前没有资格运行时的状态

  • 终止
  • 当线程的run()方法退出时,线程处于终止或死状态

    希望这能回答你的问题:)

    停车:

    出于线程调度目的禁用当前线程,除非 有许可证

    如果您希望以这种方式调用线程,因为它没有执行权限,那么线程将被停止或挂起。一旦授予权限,线程将被取消绑定并执行


    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线程状态。您是否可以添加在调用本机方法时发现线程阻塞信息的引用?