java死鎖定位與預防

2021-08-20 22:01:46 字數 927 閱讀 9154

死鎖

死鎖:是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。

死鎖發生的原因

死鎖的發生是由於資源競爭導致的,導致死鎖的原因如下:

死鎖發生的條件

死鎖的發生的四個必要條件:

這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

死鎖的例子

為了說明死鎖,我們下面舉乙個例子來說明:

執行緒a持有資源a然後試圖獲取資源b,執行緒2持有資源b同時試圖獲取資源a,這樣執行緒a和b都不能獲取彼此想要的資源,導致整個程式不能向下推進。具體**如下:

class

deadlockrunnable

implements

runnable

@override

public

void

run()}

catch

(interruptedexception e)}}

}public

class

deadlock

}

執行結果:

從結果中可以看出,兩個執行緒都不能再次獲得想要的資源,程式一直處於「停滯」狀態。

死鎖的定位與預防

那麼出現這種情況怎麼定位呢?

通過輸出我們看到thread-1和thread-0都處於blocked狀態。至此我們基本可以知道程式發生了死鎖。

死鎖的預防

死鎖的產生與預防

在多執行緒中,為了保證執行緒安全,我們會使用互斥鎖,在某些程序或者執行緒中,使用了某些資源,為了完成任務,需要請求某些程序或執行緒所擁有的資源,從而形成了永久性等待狀態 1.互斥條件 乙個資源每次只能被乙個執行流執行 2.請求與保持 乙個資源想要獲取資源時阻塞,不會釋放已有資源 3.不可剝奪條件 乙...

作業系統學習 14 預防死鎖與死鎖解除

如前所述,詳情見 作業系統學習 13.死鎖的原因與必要條件,預防死鎖和避免死鎖這兩種方法實質上都是通過施加某些限制條件,來預防發生死鎖。兩者的主要差別在於 為預防死鎖所施加的限制條件較嚴格,這往往會影響程序的併發執行 而為避免死鎖所施加的限制條件則較寬鬆,這給程序的執行提供了較寬鬆的環境,有利於程序...

事務與鎖定 檢視死鎖的資訊

模擬產生的死鎖 然後通過v locked object檢視來產看當前的死鎖資訊 select xidusn,number 回滾段號 xidslot,number 槽號 xidsqn number 序列號 object id,number 被鎖定的資料庫物件的編號 session id,number ...