在 Java 中,快速失败(Fail-Fast)和安全失败(Fail-Safe)是集合类(Collection)在迭代过程中处理并发修改的两种不同策略,二者的核心区别在于 对并发修改的感知机制与容错性。
一、 快速失败(Fail-Fast)
-
核心特性:
一旦检测到集合在迭代过程中被修改(除通过迭代器自身的方法),立即抛出ConcurrentModificationException
,终止程序。 -
实现原理:
- 迭代器内部维护一个
modCount
计数器,记录集合的修改次数。 - 每次迭代时检查
modCount
是否与初始值一致,若不一致,说明集合被修改,触发异常。
- 迭代器内部维护一个
-
适用场景:
单线程环境,或明确确保不会在迭代时修改集合的场景。 -
示例集合:
ArrayList
、HashMap
、HashSet
(非线程安全集合的默认行为)。 -
代码演示:
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C")