死鎖的條件肯定是兩個鎖以上時,才會 發生死鎖,以下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 同...