什么是 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,遍历时修改不抛异常(读的是快照)。