2017-02-28 99 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