ConcurrentModifycationException说明

  通常我们遇到这种异常一般都是在遍历List,Set,Map下的非线程安全的集合实现类,进行调用类似,add()、remove()、addAll()、removeRange()、clear(),都会抛出ConcurrentModifycationException这个异常,为啥子咧?

  这都跟一个参数--modCount有关。如下图:

  AbstractList:ArrayList,LinkedList等都会继承这个类

  其子类在实现,add,remove等进行元素删减的方法时都会对modCount进行++。在遍历的时候都会对当前迭代器中的modCount与当前遍历的集合类实例中的modCount进行比较,如果不同机会抛出ConcurrentModifycationException这个异常。

  对modCount进行++的源码:remove,clear,其他方法与之类似

  进行遍历的时候,foreach形式的其实就是使用迭代器进行迭代。迭代器的内部声明。

扫描二维码关注公众号,回复: 1844589 查看本文章

  可以看到初始化迭代器的后,内部的expectedModCount是初始化当前集合容器某个时刻的modCount的值。在调用迭代器的next()的方法的时候,会对expectedModCount与当前时刻集合容器的modCount进行比较,不一样就会抛出ConcurrentModifycationException这个异常。

  第一篇博客,写的很简陋,但是会坚持下去。生活很精彩,需要不断努力去享受这些精彩。(这篇博客补6月25日到7月1号这周的博客)。

  

猜你喜欢

转载自www.cnblogs.com/dream-ali-shaowei/p/9256831.html
今日推荐