不能在foreach 循环中添加或删除元素

这是一个数组当有两个或以上线程,对其进行修改的时候

 expectedModCount期望值                    modCount  共享值

在使用迭代器的remove方法的时候实际也是list的remove(迭代器源码879行)但是迭代器中做了一个赋值操作,把修改后的值(modCount  共享值)赋值给了( expectedModCount期望值  )

 

               

迭代器在遍历map的时候,会先拿到modCount存起来然后遍历,在每次遍历的时候会判断当前modCount的值与我第一次进来存的值是否一样,不一样就报错

如果在循环中添加或删除元素,是直接调用集合的add,remove方法【导致了modCount增加或减少,集合中的添加或删除方法会修改modCount的值】,但这些方法不会修改迭代实例中的expectedModCount,所以以后遍历比较的时候,值就不是以前的值了,就会报错【快速失败机制】

导致在迭代实例中expectedModCount 与 modCount的值不相等,抛出ConcurrentModificationException异常

posted @ 2023-06-06 21:16  一个有理想的猿  阅读(122)  评论(0)    收藏  举报