要素:兩個執行緒、兩把鎖、兩組巢狀的同步**塊。
下面就用買賣場景來模擬線程死鎖。
package com.zzj.thread;
/** * 執行緒死鎖
* *@author administrator
* */
public
class
deaththread
}/**
* 買者
* *@author administrator
* */
class money implements runnable
@override
public
void
run() catch (interruptedexception e)
system.out.println("買者說:先給貨,再交錢!");
synchronized (goods) }}
}/**
* 賣者
* *@author administrator
* */
class goods implements runnable
@override
public
void
run() catch (interruptedexception e)
system.out.println("賣者說:先交錢,再給貨!");
synchronized (money) }}
}
輸出結果:
買者思索中...
...賣者思索中...
...買者說:先給貨,再交錢!
賣者說:先交錢,再給貨!
結果是買者拿不到貨,賣者也拿不到錢。 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...