Java程序中的死鎖

什麼是死鎖?工具

        死鎖是一種特定的程序狀態,主要是因爲循環依賴致使彼此一直處於等待中,而使得程序陷入僵局,至關尷尬。死鎖不單單發生在線程之間,而對於資源獨佔的進程之間一樣可能出現死鎖。一般來講,咱們所說的死鎖,是指兩個或多個線程之間,因爲互相持有對方所須要的鎖,進而產生永久阻塞的狀況。舉個栗子,線程1手裏有鎖A,它想要得到鎖B,與此同時,線程2手裏有鎖B,它想要得到鎖A,相持不下,那麼這兩個線程將永遠地等待下去。線程

  一句話,計算機資源有限,你們互相佔着資源而不放手,並且還想要更多,致使計算機say no.設計

 
定位死鎖

        最多見的方式是利用jstack等工具獲取線程,而後定位互相之間的依賴關係,而後找到死鎖。若是是比較明顯的死鎖,是能夠直接定位到了,相似JConsole,甚至於經過圖形界面進行有限的死鎖檢測。orm

 

死鎖的誕生blog

        1.互斥條件 資源獨佔,若其餘進程使用,必須等待;進程

        2.長期持有 死鎖一直存在,本身不會釋放,也不能被釋放; 資源

        3.循環依賴關係 彼此等待,造成進程循環等待環。io

 

痛快一點的處理方法:網管,重啓form

 

如何防患?class

         1.儘可能避免使用多個鎖(若是有可能的話)。

         2.規範的使用多個鎖,並設計好鎖的獲取順序。

         3.隨用隨放。便是,手裏有鎖,若是還要得到別的鎖,必須釋放所有資源才能各取所需。

         4.規範好循環等待條件。好比,使用超時循環等待,提升程序可控性

相關文章
相關標籤/搜索