9:57中关于在foreach、iterator中并发修改异常问题
来源:5-7 同步容器-2
![](http://img1.sycdn.imooc.com/user/5697266200015c0401000100-100-100.jpg)
我有明珠一颗
2019-05-19
老师,你好!你在5-7 9:57后续视频中讲到,如果在遍历中删除,因为在源码中modCount会和expectedModCount不相等,所以抛异常。请问,这个modCount、expectedModCount在什么地方被赋值的?
写回答
1回答
-
你好,我具体说一下这里的原理吧:当调用会改变集合结构的操作,如添加、删除元素时,会使变量modCount的数值增加1,以此来记录当前集合的结构被修改了多少次。迭代器被实例话的时候,其内部也会拷贝一份该数值,存入迭代器成员变量expectedModCount中。在迭代器操作集合(如netx()、remove() )之前会校验expectedModCount与集合中的modCount值是否一致,若不一致,则说明在遍历过程中,集合的结构发生了变化,此时迭代器会立即终止对集合的操作,抛出ConcurrentModificationException异常。
112019-05-20
相似问题