首页 > 其他 > 详细

ConcurrentModifycationException说明

时间:2018-07-03 10:26:18      阅读:260      评论:0      收藏:0      [点我收藏+]

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

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

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

技术分享图片

技术分享图片

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

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

技术分享图片

技术分享图片

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

技术分享图片

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

技术分享图片

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

  

 

ConcurrentModifycationException说明

原文:https://www.cnblogs.com/dream-ali-shaowei/p/9256831.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!