首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VisualVM -线程状态

VisualVM -线程状态
EN

Stack Overflow用户
提问于 2014-12-11 00:35:54
回答 2查看 33.2K关注 0票数 91

有人能给我解释一下VisualVM中SleepingWaitParkMonitor线程状态的区别吗?

这是我发现的:

Running:线程仍在运行。

Sleeping:线程正在休眠(在线程对象上调用了方法yield() )

Wait:线程被互斥锁或屏障阻塞,正在等待另一个线程释放锁

Park:暂留的线程将被挂起,直到获得许可为止。取消驻留线程通常是通过在线程对象上调用unpark()方法来完成的

Monitor:线程正在等待条件变为true以继续执行

我不能理解的是州立公园,到底是什么挂起了这条线?如何在代码中检测导致线程暂停执行的原因?

有人能在这方面给我指点一下吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-11 00:50:57

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

  1. New

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

  1. Runnable

调用start()方法后,线程处于runnable状态,但线程调度程序尚未将其选择为正在运行的线程。

  1. Running

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

  1. Timed waiting

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

阻止(

  • Thread.sleep(sleeptime)
  • Object.wait(timeout)
  • Thread.join(timeout)
  • LockSupport.parkNanos(timeout)
  • LockSupport.parkUntil(timeout)
  1. Non-Runnable )

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

  1. Terminated

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

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

停车场:

除非许可可用,否则

会出于线程调度目的禁用当前线程。

如果您喜欢以这种方式调用线程,则线程将被暂停或挂起,因为它没有执行的权限。一旦授予权限,线程将被取消驻留并执行。

LockSupport的许可与线程相关联(即,许可被给予特定的线程),并且不会累积(即,每个线程只能有一个许可,当线程使用该许可时,它将消失)。

票数 56
EN

Stack Overflow用户

发布于 2016-04-06 19:01:40

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

代码语言:javascript
复制
BLOCKED -> Monitor
RUNNABLE -> Running
WAITING/TIMED_WAITING -> Sleeping/Park/Wait (see below)
TERMINATED/NEW -> Zombie

SleepingPark是(定时)等待的具体情况:

代码语言:javascript
复制
Sleeping: specifically waiting in Thread.sleep().  
Park:     specifically waiting in sun.misc.Unsafe.park() (presumably via LockSupport).

(映射是在ThreadMXBeanDataManager.java中执行的。)

有关Java线程状态的简短(非权威)讨论可以在here中找到。

编辑后添加:

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

票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27406200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档