【面試普通人VS高手系列】Fail-safe機制與Fail-fast機制分別有什麼作用

跟著Mic學架構發表於2022-04-06

前段時間一個小夥伴去面試,遇到這樣一個問題。

”Fail-safe機制與Fail-fast機制分別有什麼作用“

他說他聽到這個問題的時候,腦子裡滿臉問號。那麼今天我們來看一下,關於這個問題,普通人和高手應該如何回答吧。

普通人的回答
 額… . 嗯 …

 

高手的回答
Fail-safe和Fail-fast,是多執行緒併發操作集合時的一種失敗處理機制。

Fail-fast : 表示快速失敗,在集合遍歷過程中,一旦發現容器中的資料被修改了,會立刻丟擲ConcurrentModificationException異常,從而導致遍歷失敗,像這種情況

【面試普通人VS高手系列】Fail-safe機制與Fail-fast機制分別有什麼作用

定義一個Map集合,使用Iterator迭代器進行資料遍歷,在遍歷過程中,對集合資料做變更時,就會發生Fail-fast。

java.util包下的集合類都是快速失敗機制的, 常見的的使用Fail-fast方式遍歷的容器有HashMap和ArrayList等。

Fail-safe:表示失敗安全,也就是在這種機制下,出現集合元素的修改,不會丟擲ConcurrentModificationException。

原因是採用安全失敗機制的集合容器,在遍歷時不是直接在集合內容上訪問的,而是先複製原有集合內容,

在拷貝的集合上進行遍歷。由於迭代時是對原集合的拷貝進行遍歷,所以在遍歷過程中對原集合所作的修改並不能被迭代器檢測到

比如這種情況

【面試普通人VS高手系列】Fail-safe機制與Fail-fast機制分別有什麼作用

定義了一個CopyOnWriteArrayList,在對這個集合遍歷過程中,對集合元素做修改後,不會丟擲異常,但同時也不會列印出增加的元素。

java.util.concurrent包下的容器都是安全失敗的,可以在多執行緒下併發使用,併發修改。

常見的的使用Fail-safe方式遍歷的容器有ConcerrentHashMap和CopyOnWriteArrayList等。

 

總結
好的, Fail-safe和Fail-fast 的作用,你理解了嗎?

你們是否有更好的回答方式? 歡迎在評論區給我留言!

本期的普通人VS高手面試系列就到這裡結束了,喜歡的朋友記得一鍵三連,加個關注。

我是Mic,一個工作了14年的Java程式設計師,我們們下篇文章再見。

相關文章