[size=large]当使用 fail-fast iterator 对 Collection 或 Map 进行迭代操作过程中尝试直接修改 Collection / Map 的内容时,即使是在单线程下运行, java.util.ConcurrentModificationException 异常也将被抛出。
Iterator 被创建之后会保存原来容器的modCount,当原来的对象数量发生变化时,Iterator的保存的modCount不会同步改变,当执行Iterator任务操作之前都会执行checkForComodification方法,校验原来容器的modCount和保存的modCount,如果对不上这抛出ConcurrentModificationException。
所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法 remove() 来删除对象, Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。
[/size]
Iterator 被创建之后会保存原来容器的modCount,当原来的对象数量发生变化时,Iterator的保存的modCount不会同步改变,当执行Iterator任务操作之前都会执行checkForComodification方法,校验原来容器的modCount和保存的modCount,如果对不上这抛出ConcurrentModificationException。
所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法 remove() 来删除对象, Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。
[/size]
本文深入探讨了Java并发编程中fail-fast Iterator的原理与使用方法,阐述了在迭代过程中直接修改Collection或Map内容时,Java会抛出ConcurrentModificationException异常的原因。同时介绍了Iterator本身的方法remove()如何在删除对象的同时维护索引一致性。

97

被折叠的 条评论
为什么被折叠?



