例子:兩個人去就餐,但是只有一雙筷子。只有乙個人同時拿到兩隻筷子,才可以吃東西。
兩個執行緒,分別持有不同的鎖,都需要獲取對方的鎖來執行自己的任務。在這個過程中,有可能會出現互不相讓的情況。
死鎖是設計的bug,問題比較隱晦。不過死鎖造成的影響很少會立即顯現出來,乙個類可能發生死鎖,並不意味著每次都會發生死鎖,這只是表示可能。當死鎖出現時,往往是最糟糕的情況---高負載的情況下
既然可能產生死鎖,那麼如何避免死鎖。
讓程式每次至多只能獲得乙個鎖。當然,在多執行緒環境下,這種情況通常並不現實
設計時考慮清楚鎖的順序,儘量減少嵌在的加鎖互動數量
既然死鎖的產生是兩個執行緒無限等待對方持有的鎖,那麼只要等待時間有個上限不就好了。當然synchronized不具備這個功能,但是我們可以使用lock類中的trylock方法去嘗試獲取鎖,這個方法可以指定乙個超時時限,在等待超過該時限之後變回返回乙個失敗資訊
Java基礎 乙個死鎖問題
package cn.itcast 02 public class mylock package cn.itcast 02 public class dielock extends thread override public void run else package cn.itcast 02 同...
java基礎 26 死鎖問題的出現和解決
是指兩個或者兩個以上的執行緒在執行的過程中,因爭奪資源產生的一種互相等待的現象 舉例 中國人 美國人吃飯案例 正常情況 中國人 筷子兩支 美國人 刀和叉 現在 中國人 筷子一支,刀一把 美國人 筷子一支,叉一把 產生死鎖問題 中國人拿著刀的同時等著美國人把另乙隻筷子給他,美國人拿著一支筷子的同時等著...
Java中的死鎖問題
死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。簡而言之,乙個執行緒鎖住了資源a 還要使用資源b,另外乙個執行緒 鎖住了資源b 還想著得到資源a,當兩者互不相讓,就形成了死鎖。死鎖形成的條件 1 互斥條件 指程序對所分...