什么是 fail-fast 机制?

Java 集合面试题发布于

一、定义

在用迭代器遍历集合时,如果集合结构被修改(增/删),迭代器会立即抛出 ConcurrentModificationException,这就是 fail-fast。

二、实现原理

集合内部维护 modCount 记录结构修改次数。迭代器创建时记录 expectedModCount = modCount,每次 next() 检查两者是否相等,不等则抛异常。

三、触发场景

List<String> list = new ArrayList<>(Arrays.asList("a","b","c"));
for (String s : list) {
    list.remove(s);   // 抛 ConcurrentModificationException
}

四、解决方案

  • 用 Iterator.remove() 删除。
  • JUC 的 CopyOnWriteArrayList 是 fail-safe,遍历时修改不抛异常(读的是快照)。