有網(wǎng)友問預(yù)防死鎖的方法,今天就給大家講解一下預(yù)防死鎖的方法。
1、避免一個(gè)線程同時(shí)獲取多個(gè)鎖。
2、避免一個(gè)線程在鎖內(nèi)同時(shí)占用多個(gè)資源,盡量保證每個(gè)鎖只占用一個(gè)資源。
3、嘗試使用定時(shí)鎖,使用Lock.tryLock(timeout)來替代使用內(nèi)部鎖機(jī)制。
4、對(duì)于數(shù)據(jù)庫鎖,加鎖和解鎖須在一個(gè)數(shù)據(jù)庫連接里,否則會(huì)出現(xiàn)解鎖失敗的情況。
產(chǎn)生死鎖的原因主要是:
1、因?yàn)橄到y(tǒng)資源不足。
2、進(jìn)程運(yùn)行推進(jìn)的順序不合適。
3、資源分配不當(dāng)?shù)取?/p>
如果系統(tǒng)資源充足,進(jìn)程的資源請(qǐng)求都能夠得到滿足,死鎖出現(xiàn)的可能性就很低,否則就會(huì)因爭(zhēng)奪有限的資源而陷入死鎖。其次,進(jìn)程運(yùn)行推進(jìn)順序與速度不同,也可能產(chǎn)生死鎖。產(chǎn)生死鎖的四個(gè)必要條件:
1、互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用。
2、請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。
3、不剝奪條件:進(jìn)程已獲得的資源,在末使用完之前,不能強(qiáng)行剝奪。
4、循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。
這四個(gè)條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會(huì)發(fā)生死鎖。
以上就是預(yù)防死鎖的方法,希望對(duì)大家有所幫助。