【本節目标】
通過閱讀本節内容,你将通過實際運作一段代碼發現兩個程序互相等待對方讓出資源而造成死鎖的問題,了解到此問題出現的原因并具有一定的避免此類問題的認識。
死鎖
死鎖是在進行多線程同步的處理之中有可能産生的一種問題,所謂的死鎖指的是若幹個線程彼此互相等待的狀态。
下面通過一個簡單的代碼來觀察一下死鎖的表現形式,但是對于此代碼不作為重點。
範例:死鎖的展示
class Jian {
public synchronized void say(XiaoQiang xq) {
System.out.println("阿健說,此路是我開,要想從此過,留下10塊錢。") ;
xq.get() ;
}
public synchronized void get() {
System.out.println("阿健說,得到了10塊錢,可以買飯吃了,于是讓出了路");
}
}
class XiaoQiang {
public synchronized void say(Jian jj) {
System.out.println("小強說,讓我先過去,然後給你錢") ;
jj.get();
}
public synchronized void get() {
System.out.println("小強說,逃過了一劫,可以繼續送快餐了。");
}
}
public class DeadLock implements Runnable {
private Jian jj = new Jian() ;
private XiaoQiang xq = new XiaoQiang() ;
@Override
public void run() {
jj.say(xq) ;
}
public DeadLock() {
new Thread(this).start() ;
xq.say(jj) ;
}
public static void main(String[] args) {
new DeadLock() ;
}
}

圖一 執行結果圖
現在死鎖造成的主要原因是因為彼此都在互相等待着,等待着對方先讓出資源。死鎖實際上是一種開發中出現的不确定的狀态,有的時候代碼處理不當,則會不定期出現死鎖,這屬于正常開發中的調試問題。
若幹個線程通路同一資源時一定要進行同步處理,而過多的同步則會造成死鎖。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:經典案例:生産者-消費者模型 | 帶你學《Java語言進階特性》之十一 更多Java面向對象程式設計文章檢視此處