Java JVM分析,線程狀態 - 「Monitor」狀態是什麼意思?
我用visualVM連接一個多線程的Java應用程序,線程有4個狀態,分別是running,sleeping,wait,monitor。這個監控狀態是什麼意思?等待和監視器有什麼區別?
Java JVM分析,線程狀態 - 「Monitor」狀態是什麼意思?
我用visualVM連接一個多線程的Java應用程序,線程有4個狀態,分別是running,sleeping,wait,monitor。這個監控狀態是什麼意思?等待和監視器有什麼區別?
這些狀態與Thread.State
枚舉中提到的相同。 「等一等」的意思,作爲文檔說:
線程處於等待狀態,因爲調用下列方法之一:
- 的Object.wait不帶超時
- 的Thread.join沒有超時
- LockSupport.park
「監視器」 是BLOCKED
狀態,其中線程正在等待獲取對象上的鎖定(因爲它正試圖在另一個線程已經保存關聯的鎖的同時輸入塊或方法)。
這不是一個「監視」狀態......它表示線程處於Thread.State.BLOCKED
狀態。我看到有另一個很好的答案,我只是指您this link深入的解釋
監視器將意味着線程正在等待獲得一個對象的鎖。例如,當一個線程正在運行一個同步方法,而另一個線程嘗試在同一個對象上調用它時,它將無法執行,直到方法的第一次調用完成。這是因爲第一個線程在該對象上有一個監視器或鎖,所以第二個線程必須等到它被釋放。
「。同步是圍繞被稱爲內部鎖內部實體內置或監視鎖(API規範經常是指該實體簡稱爲‘顯示器’。)特性鎖打在同步的兩個方面發揮作用:強制對對象的狀態進行獨佔訪問並建立事件 - 在對可見性至關重要的關係之前。「
對於這個主題的任何人(比如OP),在這裏和文檔中知道「monitor」被用作「鎖定」的同義詞可能會有所幫助。 –
有無論如何知道哪個同步對象(或代碼行)是導致線程被阻塞/監視器的那個? – user123321
@ user123321您可以進行線程轉儲。 (「線程」選項卡右上角的按鈕。)您可以看到線程正在嘗試同步哪個線程以及哪個線程持有鎖。 – Fildor