博爲峯Java技術題 ——JavaSE 避免死鎖Ⅰ

在有些狀況下死鎖是能夠避免的。下面將展現三種用於避免死鎖的技術線程

[加鎖順序]3d

博爲峯小博老師:code

當多個線程須要相同的一些鎖,可是按照不一樣的順序加鎖,死鎖就很容易發生。blog

若是能確保全部的線程都是按照相同的順序得到鎖,那麼死鎖就不會發生。看下面這個例子:排序

4.1.tmp_副本.png

若是一個線程(好比線程3)須要一些鎖,那麼它必須按照肯定的順序獲取。它只有得到了從順序上排在前面的鎖以後,才能獲取後面的鎖。get

例如,線程2和線程3只有在獲取了鎖A以後才能嘗試獲取鎖C(獲取鎖A是獲取鎖C的必要條件)。由於線程1已經擁有了鎖A,因此線程2和3須要一直等到鎖A被釋放。而後在它們嘗試對B或C加鎖以前,必須成功地對A加了鎖。im

按照順序加鎖是一種有效的死鎖預防機制。可是,這種方式須要你事先知道全部可能會用到的鎖(並對這些鎖作適當的排序),但總有些時候是沒法預知的。技術

相關文章
相關標籤/搜索