1、避免一個線程同時獲取多個鎖。
2、避免一個線程在鎖内同時占用多個資源,盡量保證每個鎖隻占用一個資源。
3、嘗試使用定時鎖,使用Lock.tryLock(timeout)來替代使用内部鎖機制。
4、對于數據庫鎖,加鎖和解鎖須在一個數據庫連接裡,否則會出現解鎖失敗的情況。
産生死鎖的原因主要是:
1、因為系統資源不足。
2、進程運行推進的順序不合适。
3、資源分配不當等。
如果系統資源充足,進程的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則就會因争奪有限的資源而陷入死鎖。其次,進程運行推進順序與速度不同,也可能産生死鎖。産生死鎖的四個必要條件:
1、互斥條件:一個資源每次隻能被一個進程使用。
2、請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
3、不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
4、循環等待條件:若幹進程之間形成一種頭尾相接的循環等待資源關系。
這四個條件是死鎖的必要條件,隻要系統發生死鎖,這些條件必然成立,而隻要上述條件之一不滿足,就不會發生死鎖。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!