快速失败(fail-fast)和安全失败(fail-safe)

272 阅读1分钟

快速失败(fail-fast)

在Java中,快速失败(fail-fast)是集合的一种错误检测机制。使用迭代器遍历集合,在多线程下操作非安全失败集合的时候会触发fail-fast机制,并且抛出异常;在单线程下,当前遍历集合元素被更改,也会触发fail-fast机制。

迭代器遍历过程中,在使用 next()和 hasnext()方法遍历下一个元素之后,会判断 modcount 变量值和 exceptmodcount 变量值是否相同,如果相同返回,否则抛出异常并且停止遍历。

注:遍历过程中如果更新集合内容,则会修改 modcount 值,导致 exceptmodcount ≠ modcount,抛出异常并停止遍历。安全失败(fail-safe)解决了这种问题。

安全失败(fail-safe)

添加安全失败机制的集合,迭代器并不是在原来集合中进行遍历,而是拷贝集合内容,并且在拷贝的集合中进行遍历,这样的话,在遍历过程中如果原集合内容被修改,并不会被迭代器识别到,也就不会抛出异常了。