關於迭代器(Iterator)的兩種迭代機制:fail-fast 和 fail-safe多線程
fail-fast 機制:遍歷集合時,當集合結構被修改,會拋出Concurrent Modification Exception線程
觸發條件:單線程在遍歷過程修改,remove()不會觸發;多線程中一個線程遍歷時另外一個線程在進行修改對象
實現方法:在迭代器內部標記了一個mode,集合進行修改時,mode會發生改變,在迭代過程當中,每次next(),hashNext()都會去檢查這個標記是否發生變化rem
fail-safe機制:對集合結構的修改會在一個clone的集合中修改,不會拋出該錯誤hash
問題:複製集合產生大量無效對象,系統開銷大;沒法保證當前讀取數據是最新的數據it
fail-fast和 fail-safe對比io
Throw ConcurrentModification Exception | Yes | No |
Clone object | No | Yes |
Memory Overhead | No | Yes |
Examples | HashMap,Vector,ArrayList,HashSet | CopyOnWriteArrayList,ConcurrentHashMap |