fail-fast快速失敗機制分析

Fail-fast總結:

1.       Fail-fast機制式java集合中的一種異常機制。當多個線程對同一個集合的內容進行操作時,就可能會產生fail-fast。拋出java.util.ConcurrentModificationException異常時,也即產生fail-fast事件

2.       Fail-fast機制,是一種錯誤檢測機制。它只能被用來檢測錯誤,因爲JDK並不保證fail-fast機制一定會發生。若在多線程環境下使用fail-fast機制的集合,建議使用java.util.concurrent包下的的類去取代java.util包下的類。

3.       Fail-fast原理

產生fail-fast事件,是通過拋出ConcurrentModificationException異常來觸發的。

那麼,ArrayList是如何拋出ConcurrentModificationException異常的呢? 我們知道,ConcurrentModificationException是在操作Iterator時拋出的異常。若modCount不等於expectedModCount,則拋出ConcurrentModificationException異常,產生fail-fast機制。

Fail-fast是如何產生的?

當多個線程對同一個集合進行操作的時候,某線程訪問集合的過程中,該集合的內容被其他線程所改變(即其它線程通過add、remove、clear等方法,改變了modCount的值);這時,就會拋出ConcurrentModificationException異常,產生fail-fast事件。

Fail-fast和fail-safe的區別

 

Fail-fast

Fail-safe

ConcurrentModificationException

Yes

No

Clone object

No

Yes

Memory overhead

No

yes

Examples

HashMap ArrayList

HashSet Vector

 CopyOnWriteArrayList

concurrentHashMap

 

發佈了69 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章