當業務比較複雜,多執行緒應用裡有可能會發生死鎖
步驟 1 :演示死鎖
執行緒1 首先占有物件1,接著試圖占有物件2
執行緒2 首先占有物件2,接著試圖占有物件1
執行緒1 等待執行緒2釋放物件2
與此同時,執行緒2等待執行緒1釋放物件1
這樣就會。。。一直等待下去
system.out.println("t1 試圖占有安妮");
system.out.println("t1 等待中 。。。。");
synchronized (annie)
} }
};t1.start();
thread t2 = new thread() catch (interruptedexception e)
system.out.println("t2 試圖占有九尾妖狐");
system.out.println("t2 等待中 。。。。");
synchronized (ahri)
} }
};t2.start();}}
練習: 死鎖
3個同步物件a, b, c
3個執行緒 t1,t2,t3
故意設計場景,使這3個執行緒彼此死鎖
答案:
package multiplethread;
public
class
testthread
catch
(interruptedexception e)
synchronized
(b)}}}
};thread t2 =
newthread()
catch
(interruptedexception e)
synchronized
(a)}}}
};thread t3 =
newthread()
catch
(interruptedexception e)
synchronized
(c)}}}
};t1.
start()
; t2.
start()
; t3.
start();}}
Java多執行緒 死鎖
死鎖 不同的執行緒分別占用對方需要的同步資源不放棄,都在等待對方放棄自己的需要的同步資源,就形成了執行緒的死鎖 解決方法 1.專門的演算法 原則 2.儘量減少同步資源的定義 此處插入testdeadlock 死鎖問題,處理執行緒同步時容易出現 public class testdeadlock ca...
Java 多執行緒死鎖
概念 所謂死鎖是指兩個或兩個以上的程序在執行過程中,因爭奪同一資源而造成的一種互相等待的現象,若無外力作用,它們都將無法進行下去,此時稱系統處於死鎖狀態或系統產生了死鎖,class k extends thread public void run else catch interruptedexce...
Java多執行緒 執行緒死鎖
發生死鎖的原因通常是兩個物件的鎖相互等待造成的。以下用乙個例項來構造這樣的情況 package basic.e deadlock import org.apache.log4j.logger public class testdeadlock class mythread extends threa...