[英]Java JVM profiling, thread status - what does “Monitor” status mean?
我使用visualVM連接一個多線程Java應用程序,線程有4個狀態,即運行,休眠,等待,監視。 這種監控狀態意味着什么? 等待和監視器有什么區別?
這些狀態與Thread.State
枚舉中提到的相同。 “等待”意味着,正如文檔所說:
由於調用以下方法之一,線程處於等待狀態:
- Object.wait沒有超時
- Thread.join沒有超時
- LockSupport.park
“Monitor”是BLOCKED
狀態,其中線程正在等待獲取對象的鎖定(因為它試圖進入synchronized
塊或方法,而另一個線程已經擁有相關的鎖)。
這不是“監視”狀態...它表示該線程處於Thread.State.BLOCKED
狀態。 我看到還有另一個好的答案,我只想指出這個鏈接進行更深入的解釋
監視器意味着線程正在等待獲取對象的鎖定。 例如,當一個線程正在運行一個synchronized方法而另一個線程試圖在同一個對象上調用它時,它將無法在方法的第一次調用完成之后。 這是因為第一個線程在該對象上有一個監視器或鎖,所以第二個線程必須等到它被釋放。
來自Oracle線程教程 :
“同步是圍繞一個稱為內部鎖或監視器鎖的內部實體構建的。(API規范通常將此實體簡稱為”監視器“。)內部鎖在同步的兩個方面都發揮作用:強制執行對同步的獨占訪問。對象的狀態和建立事先發生的關系,這對於可見性至關重要。“
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.