概念
執行緒死鎖描述的是這樣一種情況:多個執行緒同時被阻塞,它們中的一個或者全部都在等待某個資源被釋放,由于執行緒被無限期地阻塞,因此程式不可能正常終止,
我和同學都打掃衛生,我拿著掃帚等他的簸箕,他拿著簸箕等我的掃帚
產生條件
-
互斥條件:同一時刻一執行緒只能占用一個資源,
-
同一時刻,我拿著掃帚,他拿著簸箕,
-
-
請求與保持:一個執行緒因請求資源而阻塞時,對已獲得的資源保持不放,
-
我在等他的簸箕,但我不會讓出我的掃帚
-
-
不可剝奪:已獲得的資源在為使用完時,其他執行緒不能強行剝奪,
-
我拿著掃帚,但是我不能去強搶他拿的簸箕
-
-
回圈等待
-
我拿著掃帚等他的簸箕,他拿著簸箕等我的掃帚,形成倍訓
-
如何避免
打破產生條件即可
- 破壞 互斥條件:無法被破壞,因為鎖就是通過互斥來解決執行緒安全問題
- 破壞 請求與保持條件:一次申請所有需要的資源
- 破壞 不可剝奪條件:如果執行緒已占用部分資源,且他還要申請其他資源,如果申請不到,就主動釋放它自己占有的資源
- 破壞 回圈等待條件:按照順序申請資源,釋放資源則逆序
參考:JavaGuid
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/509762.html
標籤:Java
上一篇:java基礎-集合
