Java產生死鎖的乙個簡單例子

2021-09-07 15:43:19 字數 1059 閱讀 7539

思路是建立兩個字串a和b,再建立兩個執行緒a和b,讓每個執行緒都用synchronized鎖住字串(a先鎖a,再去鎖b;b先鎖b,再鎖a),如果a鎖住a,b鎖住b,a就沒辦法鎖住b,b也沒辦法鎖住a,這時就陷入了死鎖。直接貼**:

1

public

class

deadlock 10}

11class

lock1 implements runnable23}

24}25 }catch

(exception e)28}

29}30class

lock2 implements runnable42}

43}44 }catch

(exception e)47}

48 }

執行的結果如圖所示:

可以看到,lock1獲取obj1,lock2獲取obj2,但是它們都沒有辦法再獲取另外乙個obj,因為它們都在等待對方先釋放鎖,這時就是死鎖。

如果我們只執行lock1呢?修改一下main函式,把執行緒b注釋掉。

1

public

class

deadlock 10}

11class

lock1 implements runnable23}

24}25 }catch

(exception e)28}

29}30class

lock2 implements runnable42}

43}44 }catch

(exception e)47}

48 }

執行結果為:

由於沒有其它執行緒和lock1爭奪obj1和obj2,lock1可以不斷地迴圈獲取並釋放它們,這時沒有死鎖。

Java產生死鎖的乙個簡單例子

思路是建立兩個字串a和b,再建立兩個執行緒a和b,讓每個執行緒都用synchronized鎖住字串 a先鎖a,再去鎖b b先鎖b,再鎖a 如果a鎖住a,b鎖住b,a就沒辦法鎖住b,b也沒辦法鎖住a,這時就陷入了死鎖。直接貼 public class deadlock class lock1 impl...

Java產生死鎖的乙個簡單例子

思路是建立兩個字串a和b,再建立兩個執行緒a和b,讓每個執行緒都用synchronized鎖住字串 a先鎖a,再去鎖b b先鎖b,再鎖a 如果a鎖住a,b鎖住b,a就沒辦法鎖住b,b也沒辦法鎖住a,這時就陷入了死鎖。直接貼 public class deadlock class lock1 impl...

死鎖的定義及產生死鎖的四個條件

答 死鎖的定義 是指多個程序迴圈等待它方占有的資源而無限期地僵持下去的局面。死鎖的產生的四個必備條件 1 互斥條件 某個資源同時只能有乙個程序占用 2 不可搶占條件 資源只能由佔有者程序自行釋放,不能被申請者程序搶占 3 占有且申請條件 程序至少已經占有乙個資源,但又申請新的資源 4 迴圈等待條件 ...