Java:什么是死锁?怎么避免死锁?
1. 死鎖的概念
? ? ? 線程死鎖描述的是這樣一種情況:多個(gè)線程同時(shí)被阻塞,它們中的一個(gè)或者全部都在等待某個(gè)資源被釋放。由于線程被無限期地阻塞,因此程序不可能正常終止。
? ? ? 好比是甲同學(xué)和乙同學(xué)在打掃衛(wèi)生,甲同學(xué)拿著掃帚等乙同學(xué)的簸箕,而乙同學(xué)拿著簸箕在等甲同學(xué)的掃帚
2.死鎖產(chǎn)生的條件
????????互斥條件:同一時(shí)刻一線程只能占用一個(gè)資源。
同一時(shí)刻,甲拿著掃帚,乙拿著簸箕。
????????請(qǐng)求與保持:一個(gè)線程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。
甲在等乙的簸箕,但甲不會(huì)讓出自己的掃帚
????????不可剝奪:已獲得的資源在為使用完時(shí),其他線程不能強(qiáng)行剝奪。
甲拿著掃帚,但是甲不能去強(qiáng)搶乙拿的簸箕
????????循環(huán)等待
甲拿著掃帚在等乙的簸箕,而乙拿著簸箕等甲的掃帚,形成閉環(huán)
3.如何避免死鎖呢?
????????打破產(chǎn)生條件即可
破壞互斥條件:無法被破壞,因?yàn)殒i就是通過互斥來解決線程安全問題
破壞請(qǐng)求與保持條件:一次申請(qǐng)所有需要的資源
破壞不可剝奪條件:如果線程已占用部分資源,且他還要申請(qǐng)其他資源,如果申請(qǐng)不到,就主動(dòng)釋放它自己占有的資源
破壞循環(huán)等待條件:按照順序申請(qǐng)資源,釋放資源則逆序
總結(jié)
以上是生活随笔為你收集整理的Java:什么是死锁?怎么避免死锁?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: pdf压缩之GSview
 - 下一篇: cvss评分及漏洞矢量