Java多執行緒 執行緒死鎖

2021-09-09 01:13:23 字數 1906 閱讀 1693

發生死鎖的原因通常是兩個物件的鎖相互等待造成的。

以下用乙個例項來構造這樣的情況:

package basic.e_deadlock;

import org.apache.log4j.logger;

public class testdeadlock

}class mythread extends thread

@override

public void run()

}class deadlockrisk

private resource resourcea = new resource();

private resource resourceb = new resource();

public void read()

} logger.debug("**********=read end**********===");

} public void write(int a, int b)

} logger.debug("**********=write end**********===");

}}

執行結果:

0    [執行緒1] debug basic.e_deadlock.deadlockrisk - **********=read  begin**********=

0 [執行緒2] debug basic.e_deadlock.deadlockrisk - **********=read begin**********=

0 [執行緒4] debug basic.e_deadlock.deadlockrisk - **********=read begin**********=

0 [執行緒3] debug basic.e_deadlock.deadlockrisk - **********=read begin**********=

0 [執行緒1] debug basic.e_deadlock.deadlockrisk - read():執行緒1獲取了resourcea 的鎖!

0 [執行緒1] debug basic.e_deadlock.deadlockrisk - read():執行緒1獲取了resourceb 的鎖!

0 [執行緒1] debug basic.e_deadlock.deadlockrisk - **********=read end**********===

0 [執行緒2] debug basic.e_deadlock.deadlockrisk - read():執行緒2獲取了resourcea 的鎖!

0 [執行緒1] debug basic.e_deadlock.deadlockrisk - **********=write being**********=

1 [執行緒2] debug basic.e_deadlock.deadlockrisk - read():執行緒2獲取了resourceb 的鎖!

1 [執行緒2] debug basic.e_deadlock.deadlockrisk - **********=read end**********===

1 [執行緒2] debug basic.e_deadlock.deadlockrisk - **********=write being**********=

1 [執行緒1] debug basic.e_deadlock.deadlockrisk - write():執行緒1獲取了resourceb 的鎖!

1 [執行緒4] debug basic.e_deadlock.deadlockrisk - read():執行緒4獲取了resourcea 的鎖!

注意:此時執行緒1在等待resourceb的資源,執行緒2在等待resourcea的資源。兩個執行緒在相互等待,出現死鎖。

Java多執行緒 死鎖

死鎖 不同的執行緒分別占用對方需要的同步資源不放棄,都在等待對方放棄自己的需要的同步資源,就形成了執行緒的死鎖 解決方法 1.專門的演算法 原則 2.儘量減少同步資源的定義 此處插入testdeadlock 死鎖問題,處理執行緒同步時容易出現 public class testdeadlock ca...

Java 多執行緒死鎖

概念 所謂死鎖是指兩個或兩個以上的程序在執行過程中,因爭奪同一資源而造成的一種互相等待的現象,若無外力作用,它們都將無法進行下去,此時稱系統處於死鎖狀態或系統產生了死鎖,class k extends thread public void run else catch interruptedexce...

Java多執行緒死鎖模型

要素 兩個執行緒 兩把鎖 兩組巢狀的同步 塊。下面就用買賣場景來模擬線程死鎖。package com.zzj.thread 執行緒死鎖 author administrator public class deaththread 買者 author administrator class money ...