fail-fast
与 fail-safe
是多线程并发操作集合时的一种失败处理机制。
fail-fast
fail-fast
表示快速失败,在集合遍历过程中,一旦发现容器的数据被修改过,则立刻抛出异常 ConcurrentModificationException
,导致整个遍历过程是失败的,具体实现:ArrayList
HashMap
fail-safe
fail-safe表示失败安全,在集合遍历过程中,一旦发现容器的数据被修改过,不会抛出异常ConcurrentModificationException
,采用fail-safe机制时,在遍历时不在集合上进行访问,而是先复制原有内容,在拷贝的集合上进行遍历,由于迭代器是对原有集合的拷贝进行遍历的,所以在遍历过程中,对原始集合的修改,不能被迭代器检测到。fail-safe的应对策略,牺牲一致性来让整个遍历运行完成。具体实现:CopyOnWriteArrayList