Java自學 多執行緒 死鎖

2021-09-24 16:11:05 字數 1436 閱讀 3863

當業務比較複雜,多執行緒應用裡有可能會發生死鎖

步驟 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...