乙個JAVA死鎖的Demo

2021-08-28 05:55:06 字數 763 閱讀 8048

死鎖的條件肯定是兩個鎖以上時,才會 發生死鎖,以下demo是模擬的兩個鎖,通過兩個執行緒分別呼叫兩個方法,這兩個方法加鎖的順序正好相反,從而造成兩個執行緒相互等待,互不釋放鎖

package com.threaddemo;

public class deadlocksample

private void testdeadlock()

});thread t2 = new thread(new runnable()

});t1.start();

t2.start();

}//先synchronized obj1,再synchronized obj2

private void callock_obj1_first() }}

//先synchronized obj2,再synchronized obj1

private void callock_obj2_first() }}

/*** 為了便於讓兩個執行緒分別鎖住其中乙個物件,

* 乙個執行緒鎖住obj1,然後一直等待obj2,

* 另乙個執行緒鎖住obj2,然後一直等待obj1,

* 然後就是一直等待,死鎖產生

*/private void sleep() catch (interruptedexception e)

}}

解決辦法:

(1)調整鎖的順序,保持一致

(2)或者採用定時鎖,一段時間後,如果還不能獲取到鎖就釋放自身持有的所有鎖。

乙個關於 死鎖 的實現Demo

乙個死鎖的實現 public class mytestsisuo catch interruptedexception e system.out.println t1 get o1 需要資源o2 但是 t2 獨佔 未釋放 互相競爭資源 死鎖 synchronized o2 thread t2 new...

乙個死鎖的簡易好理解的Demo

package 死鎖demo public class deadlock implements runnable override public void run catch interruptedexception e synchronized o2 else catch interruptede...

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 同...