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