2011-07-15 87 views

回答

78

這些狀態與Thread.State枚舉中提到的相同。 「等一等」的意思,作爲文檔說:

線程處於等待狀態,因爲調用下列方法之一:

  • 的Object.wait不帶超時
  • 的Thread.join沒有超時
  • LockSupport.park

「監視器」 是BLOCKED狀態,其中線程正在等待獲取對象上的鎖定(因爲它正試圖在另一個線程已經保存關聯的鎖的同時輸入​​塊或方法)。

+21

對於這個主題的任何人(比如OP),在這裏和文檔中知道「monitor」被用作「鎖定」的同義詞可能會有所幫助。 –

+5

有無論如何知道哪個同步對象(或代碼行)是導致線程被阻塞/監視器的那個? – user123321

+2

@ user123321您可以進行線程轉儲。 (「線程」選項卡右上角的按鈕。)您可以看到線程正在嘗試同步哪個線程以及哪個線程持有鎖。 – Fildor

7

這不是一個「監視」狀態......它表示線程處於Thread.State.BLOCKED狀態。我看到有另一個很好的答案,我只是指您this link深入的解釋

5

監視器將意味着線程正在等待獲得一個對象的鎖。例如,當一個線程正在運行一個同步方法,而另一個線程嘗試在同一個對象上調用它時,它將無法執行,直到方法的第一次調用完成。這是因爲第一個線程在該對象上有一個監視器或鎖,所以第二個線程必須等到它被釋放。

Oracle Threading Tutorials

「。同步是圍繞被稱爲內部鎖內部實體內置或監視鎖(API規範經常是指該實體簡稱爲‘顯示器’。)特性鎖打在同步的兩個方面發揮作用:強制對對象的狀態進行獨佔訪問並建立事件 - 在對可見性至關重要的關係之前。「

相關問題