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


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

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

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

普通人的回答
 額… . 嗯 …

 

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

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

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

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

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

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

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

比如這種情況

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

java.util.concurrent包下的容器都是安全失敗的,可以在多線程下並發使用,並發修改。

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

 

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

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

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

我是Mic,一個工作了14年的Java程序員,咱們下篇文章再見。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM