Java多執行緒死鎖狀態典例及解決方案

2021-09-11 18:35:18 字數 1245 閱讀 9063

所謂死鎖是指兩個或兩個以上的執行緒在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。 簡單地講,死鎖時過多的同步可能造成相互不是放資源的現象。

兩位女孩,小a占用著口紅,持有口紅的鎖;小c占用著鏡子,持有鏡子的鎖,這個時候,小a想要鏡子,小c卻想要口紅,但小a和小c卻相互不釋放,兩人互相等待對方鬆開鎖。就這樣,局面僵持了。。。就死鎖了

public class deadlock

}//口紅

class lipstick

//鏡子

class mirror

//化妝

class markup extends thread

public void run()

private void markup() catch(interruptedexception e)

synchronized(mirror)

}}else catch(interruptedexception e)

synchronized(lipstick)

}} }

}

執行結果:小a塗口紅

小c照鏡子

注意不要在同乙個**塊中,同時持有多個物件的鎖。下面**對上面例子做簡單修改。把第二次的synchronized**塊從第一次的synchronized**塊中移了出來,避免了鎖套鎖,這樣就可以避免死鎖了。

public class deadlock 

}class lipstick

class mirror

class markup extends thread

public void run()

public void markup() catch(interruptedexception e)

}synchronized(mirror)

}else catch(interruptedexception e)

}synchronized(lipstick)

} }}

執行結果:小a塗口紅

小c照鏡子

小c塗口紅

小a照鏡子

這樣修改後的程式就不會進入死鎖狀態了,謝謝瀏覽。。。

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