Java:什么是死锁?怎么避免死锁?
生活随笔
收集整理的這篇文章主要介紹了
Java:什么是死锁?怎么避免死锁?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 死鎖的概念
? ? ? 線程死鎖描述的是這樣一種情況:多個線程同時被阻塞,它們中的一個或者全部都在等待某個資源被釋放。由于線程被無限期地阻塞,因此程序不可能正常終止。
? ? ? 好比是甲同學和乙同學在打掃衛生,甲同學拿著掃帚等乙同學的簸箕,而乙同學拿著簸箕在等甲同學的掃帚
2.死鎖產生的條件
????????互斥條件:同一時刻一線程只能占用一個資源。
同一時刻,甲拿著掃帚,乙拿著簸箕。
????????請求與保持:一個線程因請求資源而阻塞時,對已獲得的資源保持不放。
甲在等乙的簸箕,但甲不會讓出自己的掃帚
????????不可剝奪:已獲得的資源在為使用完時,其他線程不能強行剝奪。
甲拿著掃帚,但是甲不能去強搶乙拿的簸箕
????????循環等待
甲拿著掃帚在等乙的簸箕,而乙拿著簸箕等甲的掃帚,形成閉環
3.如何避免死鎖呢?
????????打破產生條件即可
破壞互斥條件:無法被破壞,因為鎖就是通過互斥來解決線程安全問題
破壞請求與保持條件:一次申請所有需要的資源
破壞不可剝奪條件:如果線程已占用部分資源,且他還要申請其他資源,如果申請不到,就主動釋放它自己占有的資源
破壞循環等待條件:按照順序申請資源,釋放資源則逆序
總結
以上是生活随笔為你收集整理的Java:什么是死锁?怎么避免死锁?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pdf压缩之GSview
- 下一篇: java美元兑换,(Java实现) 美元