java併發編程實戰(4)-活躍性危險:死鎖

死鎖:java

   java程序沒法從死鎖中恢復過來,在設計時必定要排除有可能發生死鎖的地方。線程

一、鎖順序死鎖:設計

    若是全部線程都以固定的順序來獲取鎖,那麼就不會出現死鎖。對象

    A、B兩個鎖,方法1是先鎖A,再鎖B,方法2是先鎖B,再鎖A。開發

    線程1調用方法1鎖住了 A ,嘗試去獲取B ,線程2調用方法2鎖住了 B,嘗試去獲取 A 同步

二、動態的鎖順序死鎖:程序

    因爲參數的傳遞不可控,致使鎖順序死鎖。方法

 三、協助對象之間發生死鎖時間

    若是在持有鎖時調用某個外部方法,那麼將出現活躍性問題。在這個外部方法中可能會獲取其餘鎖(可能會產生死鎖),或者阻塞時間過長,致使其餘線程沒法及時獲取當前被持有的鎖。阻塞

四、開發調用

    調用某個方法時不須要持有鎖,那麼這種調用被稱爲開發調用。儘量的不要在方法體上直接加同步鎖,而是在須要被保護涉及共享狀態的操做上加鎖。

五、

相關文章
相關標籤/搜索