中文版網(wǎng)站建設(shè)費(fèi)用百度一下百度
Fail-fast
表示快速失敗,在集合遍歷過程中,一旦發(fā)現(xiàn)容器中的數(shù)據(jù)被修改了,會(huì)立刻拋出 ConcurrentModificationException 異常,從而導(dǎo)致遍歷失敗,像這種情況

定義一個(gè) Map 集合,使用 Iterator 迭代器進(jìn)行數(shù)據(jù)遍歷,在遍歷過程中,對(duì)集合數(shù)據(jù)做變更時(shí),就會(huì)發(fā)生 fail-fast。java.util 包下的集合類都是快速失敗機(jī)制的, 常見的的使用 fail-fast 方式遍歷的容器有HashMap 和 ArrayList 等。
Fail-safe
Fail-safe,表示失敗安全,也就是在這種機(jī)制下,出現(xiàn)集合元素的修改,不會(huì)拋出 ConcurrentModificationException。原因是采用安全失敗機(jī)制的集合容器,在遍歷時(shí)不是直接在集合內(nèi)容上訪問的,而是先復(fù)制原有集合內(nèi)容,在拷貝的集合上進(jìn)行遍歷。由于迭代時(shí)是對(duì)原集合的拷貝進(jìn)行遍歷,所以在遍歷過程中對(duì)原集合所作的修改并不能被迭代器檢測(cè)到

定義了一個(gè) CopyOnWriteArrayList,在對(duì)這個(gè)集合遍歷過程中,對(duì)集合元素做修改后,不會(huì)拋出異常,但同時(shí)也不會(huì)打印出增加的元素。java.util.concurrent 包下的容器都是安全失敗的,可以在多線程下并發(fā)使用,并發(fā)修改。常見的的使用 fail-safe 方式遍歷的容器有 ConcerrentHashMap 和CopyOnWriteArrayList等。
?