20 執行緒的活性故障 死鎖

2021-09-11 09:22:58 字數 478 閱讀 3902

死鎖是執行緒的一種常見活性故障。如果兩個或者更多的執行緒因相互等待對方而被永遠暫停(執行緒的生命週期狀態為 blocked 或者 waiting), 那麼我們就稱這些執行緒產生了死鎖(deadlock)。 由於產生死鎖的執行緒的生命週期狀態永遠是非執行狀態,因此這些執行緒所要執行的任務也永遠無法進展。死鎖產生的一種典型情形如下圖。

執行緒一旦產生死鎖,那麼這些執行緒及相關的資源將滿足如下全部條件。

這些條件是死鎖產生的必要條件而非充分條件,也就是說只要產生了死鎖,那麼上面這些條件一定同時成立,但是上述條件即使同時成立也不一定就能產生死鎖 。

由於鎖具有排他性並且鎖只能夠由其持有執行緒主動釋放,因此由鎖導致的死鎖只能夠從消除「占用並等待資源」和消除「迴圈等待資源」這兩個方向入手 。

死鎖自動恢復的實際意義並不大。原因:

21 執行緒的活性故障 鎖死

等待執行緒由於喚醒其所需的條件永遠無法成立,或者其他執行緒無法喚醒這個執行緒而一直處於非執行狀態 執行緒並未終止 導致其任務 一直無法進展,那麼我們就稱這個執行緒被鎖死。訊號丟失鎖死是由於沒有相應的通知執行緒來喚醒 等 待執行緒而使等待執行緒一直處於等待狀態的一種活性故障 訊號丟失鎖死的乙個典型例子...

第七章 執行緒的活性故障

死鎖會導致相關執行緒一直被暫停使得其任務無法進展。產生死鎖的必要條件包括 資源互斥 資源不可搶占 占用並等待資源以及迴圈等待資源。我們可以通過檢視執行緒轉儲手工檢測死鎖,也可以利用threadmxbean.finddeadlockedthreads 方法進行死鎖的自動檢測。死鎖的規避方法包括 粗鎖法...

執行緒的死鎖

如果乙個程序集合裡面的每個程序都在等待這個集合中的其他乙個程序 包括自身 才能繼續往下執行,若無外力他們將無法推進,這種情況就是死鎖,處於死鎖狀態的程序稱為死鎖程序 乙個簡單的死鎖類 當deadlock類的物件flag 1時 td1 先鎖定o1,睡眠500毫秒 而td1在睡眠的時候另乙個flag 0...