死鎖:
死鎖是指在一組程序中的各個程序均占有不會釋放的資源,但因互相申請被其他程序所站用不會釋放的資源而處於的一種永久等待狀態。
簡言之為多個程序互相佔著對方需要的資源,不肯釋放,形成僵持。
產生死鎖的四個必要條件:
(1) 互斥條件:乙個資源每次只能被乙個程序使用。
(2) 請求與保持條件:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。
(3) 不剝奪條件:程序已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係
只需破壞其中乙個或多個條件,死鎖便能解除。
例項:
package com.keji.oop;
public
class
deadlock
}//口紅
class
lipstick
//鏡子
class
mirror
class
makeup
extends
thread
@override
public
void
run(
)catch
(interruptedexception e)
}//互相持有對方的鎖,需要拿到對方的資源
private
void
makeup()
throws interruptedexception }}
else}}
}}
結果:
產生死鎖:雙方不肯釋放對方需要的資源
解決方案:
結果:
可以看到,不再產生死鎖。
執行緒死鎖(DeadLock)
執行緒死鎖是指兩個或兩個以上的執行緒互相持有對方所需要的資源,由於synchronized的特性,乙個執行緒持有乙個資源,或者說獲得乙個鎖,在該執行緒釋放這個鎖之前,其它執行緒是獲取不到這個鎖的,而且會一直死等下去,因此這便造成了死鎖。互斥條件 乙個資源,或者說乙個鎖只能被乙個執行緒所占用,當乙個執...
關於java的死鎖DeadLock
看scjp考題的時候,關於一道多執行緒題目,總是不能把它推成死鎖,鬱悶之下,一看答案,原來真的不是死鎖,可是為什麼我老是想要把它推成死鎖呢?很明顯,是沒有學到家。所以,翻箱倒櫃查完資料之後,寫出乙個死鎖demo,來確定自己確實知道了什麼是死鎖。public class deadlockdemo ca...
JAVA 什麼是死鎖 deadlock ?
死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去 1 因為系統資源不足。2 程序執行推進順序不合適。3 資源分配不當等。如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則 就會因爭奪有限的資源而陷入死鎖。其...