天天看點

【狂神說Java】死鎖

多個線程各自占有一些共享資源,并且互相等待其他線程占有的資源才能運作,而導緻兩個或者多個線程都在等待對方釋放資源,都停止執行的情形。

某一個同步塊同時擁有“兩個以上對象的鎖”,就可能發生“死鎖”的問題。

互斥條件:一個資源每次隻能被一個程序使用

請求與保持條件:一個程序因請求資源阻塞時,對已獲得的資源保持不放。

不剝奪條件:程序已獲得資源,在未使用完成前,不能強行剝奪。

循環等待條件:若幹程序之間形成一種頭尾相接的循環等待資源關系。

這裡死鎖的解決方法:讓一個同步塊中隻有一個對象的鎖