9:57中关于在foreach、iterator中并发修改异常问题

来源:5-7 同步容器-2

我有明珠一颗

2019-05-19

老师,你好!你在5-7 9:57后续视频中讲到,如果在遍历中删除,因为在源码中modCount会和expectedModCount不相等,所以抛异常。请问,这个modCount、expectedModCount在什么地方被赋值的?

写回答

1回答

Jimin

2019-05-19

你好,我具体说一下这里的原理吧:当调用会改变集合结构的操作,如添加、删除元素时,会使变量modCount的数值增加1,以此来记录当前集合的结构被修改了多少次。迭代器被实例话的时候,其内部也会拷贝一份该数值,存入迭代器成员变量expectedModCount中。在迭代器操作集合(如netx()、remove() )之前会校验expectedModCount与集合中的modCount值是否一致,若不一致,则说明在遍历过程中,集合的结构发生了变化,此时迭代器会立即终止对集合的操作,抛出ConcurrentModificationException异常。

1
1
我有明珠一颗
非常感谢!
2019-05-20
共1条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程