关于Collection的ConcurrentModificationException
在使用Java迭代器的时候,执行next()方法调用一个名为checkForComodification()的方法,简单看一下方法的具体实现代码
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
modCount 表示collection中数据变更操作的次数
expectedModCount 期待的容器变更次数,操作迭代器的过程中期待的是不会出现并发操作,因此理想的条件是modCount == expectedModCount
在初始迭代器的时候从Collection中modCount拷贝到expectedModCount,在迭代器执行的时候,如果Collection中元素出现并发变更操作,就会导致expectedModCount与modCount不一致并在next()执行的时候抛出异常,从而避免了对容器的并发操作。