大型网站流量,wordpress社区小程序,教育网站制作一般多少钱,网上国网app推广经验简介或许有很多小伙伴都尝试过如下的代码#xff1a;然后会发现抛出java.util.ConcurrentModificationException异常#xff0c;这是一个并发异常。那么这个到底是什么情况#xff1f;首先需要介绍一下增强for循环增强for循环增强for循环是Java1.5后#xff0c;Collection实…简介或许有很多小伙伴都尝试过如下的代码然后会发现抛出java.util.ConcurrentModificationException异常这是一个并发异常。那么这个到底是什么情况首先需要介绍一下增强for循环增强for循环增强for循环是Java1.5后Collection实现了Iterator接口后出现的。增强for循环的代码如下其实增强for循环就是使用Iterator迭代器进行迭代的增强for循环就变成下面这样那么为什么在增强for循环中调用list.remove(object)会出事呢那么咱们看看ArrayList下的 Iterator的实现类 Itr类Itr子类Itr子类是Iterator的实现类属于ArrayList私有的局部内部类。我截取了Itr类的部分代码如下elementData是ArrayList存放元素的数组上面代码没有贴出来。size 是elementData实际存放的容量大小modCount 记录elementData容量的修改次数expectedModCount 记录实例化迭代器Itr时elementData容量的修改次数注意在迭代器中当执行next方法的时候会去调用checkForComodification方法判断elementData 的容量是否被修改过。然后来看看ArrayList的remove(object)方法截取部分代码如下可以发现调用remove(object)方法时调用了fastRemove方法在fastRemove方法中执行modCount现在把文章开头的代码拷下来再来分析一次当执行了list.remove时执行modCount。此时迭代器再往下进行迭代执行了next方法发现 modCount expectedModCount那么则抛出java.util.ConcurrentModificationException异常。 之所以Iterator认为是一个并发异常。是因为你不在迭代器里操作而是在迭代器外面进行remove操作呀难道没有其他解决方案吗有滴。解决方案那么就是使用Itr的 remove方法。Itr子类重写了 remove 方法这里部分代码其实很简单就是remove后把 expectedModCount 同步一下 modCount 的值这就解决了。完整代码如下总结本来我还不知道增强for循环是调用Iterator进行迭代的要不是我debug了一波我还不知道呐。还是小有收获。