为什么在迭代线程不安全的集合时检查并发修改?

fol*_*oat 1 java concurrency

在同步集合中检查并发修改的快速失败机制是合理的,因为这些集合在多线程环境中被认为是线程安全的,因此它们应该知道并发修改。

但我很困惑,为什么那些ArrayList应该在单线程环境中工作的线程不安全集合也需要注意迭代中的并发修改?

感谢您提前回复!

And*_*ner 7

不要将“并发修改”中的“并发”误认为仅指多线程。

您也可以在单线程代码中获得 ConcurrentModificationException:

List<String> list = new ArrayList<>();
list.add("");
Iterator<String> it = list.iterator();
list.add("");
it.next(); // ConcurrentModificationException
Run Code Online (Sandbox Code Playgroud)

  • @folkboat 的解释可以在`ArrayList`的文档中找到:`这个类的iterator和listIterator方法返回的迭代器是fail-fast的[...]因此,面对并发修改,迭代器会快速而干净地失败,而不是在未来不确定的时间冒任意、非确定性行为的风险。 (2认同)