2017-02-28 84 views
3

显示,如果我们将谷歌类似的Java线程状态“,我们将看到大约这张图:如何匹配理论线程状态和状态通过jvisualvm

enter image description here

但是,如果我们将打开jVisualVm我们会看到以下:

enter image description here

你能帮助meatch这些图?睡眠状态只是Thread.sleep()?跑步的特例?

什么公园状态?(我试图谷歌,但我感到困惑,因为我只是第一个图之前就知道)

回答

1

该图表示java.lang.Thread.State枚举。 The Javadoc is quite helpful to get an understanding of the mapping you seek

的JVisualVM状态代表了额外的状态的描述,你会在一个线程转储看到,例如:

"Finalizer" daemon prio=8 tid=0x022f4000 nid=0xd14 in Object.wait() [0x044cf000] 
    java.lang.Thread.State: WAITING (on object monitor) 

所以,你可以破译的状态你自己,如果你得到一个线程转储和比较状态JVisualVM和线程名称的线程转储。

这里是你想要的映射:

  • Running - >java.lang.Thread.State: RUNNABLE
  • Sleeping - >java.lang.Thread.State: TIMED_WAITING (sleeping)
  • Wait - >java.lang.Thread.State: WAITING TIMED_WAITING (on object monitor)
  • Park - >java.lang.Thread.State: WAITING TIMED_WAITING (parking)
  • Monitor - >java.lang.Thread.State: BLOCKED (on object monitor)

Park状态是WAITINGTIMED_WAITING的特例。与Wait的区别在于Wait发生在对象监视器上(即​​块内的Object.wait())。另一方面,Park通过Unsafe.park从调度中移除线程而不需要保持监视器(即,它不需要​​块)。

+0

还不清楚。例如TIMED_WAITING与WAITING TIMED_WAITING。停車處? – gstackoverflow

+0

你可以检查我已经添加的JavaDoc链接。 'WAITING' - 等待线程的线程状态。由于调用以下方法之一,线程处于等待状态:没有超时的Object.wait,没有超时的Thread.join,LockSupport.park; 'TIMED_WAITING' - 具有指定等待时间的等待线程的线程状态。线程处于定时等待状态,因为以指定的肯定等待时间调用以下方法之一:Thread.sleep,超时的Object.wait,超时的Thread.join,LockSupport.parkNanos,LockSupport。parkUntil – bashnesnos

+0

@gstackoverflow我你能澄清词组添加澄清了'Park'以及 – bashnesnos

1

公园

sun.misc.Unsafe.park() 
+0

你能延长你的回应吗? java doc不是很明显 – gstackoverflow