当前位置: 首页 > 知识库问答 >
问题:

VisualVM-线程状态

洪彬
2023-03-14

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

这是我发现的:

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

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

有人能在这方面指导我吗。

谢谢

共有2个答案

时仰岳
2023-03-14

VisualVM将Java线程状态(如@Maciej的回答中所述)映射到其UI中呈现的状态,如下所示:

BLOCKED -> Monitor
RUNNABLE -> Running
WAITING/TIMED_WAITING -> Sleeping/Park/Wait (see below)
TERMINATED/NEW -> Zombie

睡觉Park是(定时)等待的具体情况:

Sleeping: specifically waiting in Thread.sleep().  
Park:     specifically waiting in sun.misc.Unsafe.park() (presumably via LockSupport).

(映射在threadmxbeanadamager.java中执行)

可以在这里找到Java线程状态的简短(非权威)讨论。

编辑后添加:

还值得注意的是,在调用本机方法时阻塞的线程在JVM中显示为RUNNABLE,因此VisualVM报告为Running(并消耗100%的CPU)。

蓟辰沛
2023-03-14

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

  1. 新的

如果您创建了Thread类的实例,但在调用start()方法之前,线程处于新状态。

调用start()方法后,该线程处于可运行状态,但线程调度程序尚未选择它作为运行线程。

如果线程调度程序选择了线程,则线程处于运行状态。

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

  • Thread.sleep(睡眠时间)
  • Object.wait(超时)
  • Thread.join(超时)
  • 锁定upport.parkNanos(超时)
  • 锁定upport.park直到(超时)

这是线程仍处于活动状态,但当前没有资格运行时的状态。

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

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

停车:

除非许可证可用,否则禁用当前线程以进行线程调度。

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

LockSupport的许可证与线程相关(即许可证授予特定线程),并且不会累积(即每个线程只能有一个许可证,当线程消耗该许可证时,它就会消失)。

 类似资料:
  • VisualVM是一个集成多个JDK命令行工具的可视化工具。可以作为Java应用程序性能分析和运行监控的工具。开发人员可以利用它来监控、分析线程信息,浏览内存堆数据。系统管理员可以利用它来监测、控制Java应用程序横跨整个网络的情况。Java应用程序使用人员可以利用它来创建包含所有必要信息的Bug 报告。

  • > 我是Java多线程的新手。想知道线程池执行器中空闲线程的状态。它在RUNNABLE/WAITING中吗? 如果空闲线程处于RUNNABLE状态,新任务如何附加到空闲线程?AFAIK我们为线程/池分配一个可运行/可调用的对象。但我的问题是ThreadPoolExecitor如何将排队的可运行对象分配给空闲线程??

  • 本文向大家介绍IOS多线程开发之线程的状态,包括了IOS多线程开发之线程的状态的使用技巧和注意事项,需要的朋友参考一下 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算。可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行。但是机器码是按顺序执行的,一个复杂的多步操作只能一步步按顺序逐个执行。改变这种状况可以从两个角度出发:对于单核处理器,可以将多个

  • 问题内容: 我正在使用Windows 7 OS。我的应用程序中有线程。为了测试警报以检查线程的运行状况,我需要手动杀死线程并检查警报是否正常运行。我们可以像杀死线程一样杀死线程吗? 问题答案: 没有杀死线程的安全方法没有杀死线程的安全方法。这不是您要刻意做的事情。为了进行测试,我将代码添加到您的应用程序中以支持此操作。

  • 本文向大家介绍线程池都有哪些状态?相关面试题,主要包含被问及线程池都有哪些状态?时的应答技巧和注意事项,需要的朋友参考一下 RUNNING:这是最正常的状态,接受新的任务,处理等待队列中的任务。 SHUTDOWN:不接受新的任务提交,但是会继续处理等待队列中的任务。 STOP:不接受新的任务提交,不再处理等待队列中的任务,中断正在执行任务的线程。 TIDYING:所有的任务都销毁了,workCou

  • 本文向大家介绍线程有哪些基本状态?相关面试题,主要包含被问及线程有哪些基本状态?时的应答技巧和注意事项,需要的朋友参考一下 线程的6种状态: 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()