你的位置:首页 > 软件开发 > Java > 【JAVA集合】集合迭代器快速失败行为及CopyOnWriteArrayList

【JAVA集合】集合迭代器快速失败行为及CopyOnWriteArrayList

发布时间:2016-03-13 08:00:06
以下内容基于jdk1.7.0_79源码;什么是集合迭代器快速失败行为以ArrayList为例,在多线程并**况下,如果有一个线程在修改ArrayList集合的结构(插入、移除...),而另一个线程正在用迭代器遍历读取集合中的元素,此时将抛出ConcurrentModificati ...

以下内容基于jdk1.7.0_79源码;

什么是集合迭代器快速失败行为

以ArrayList为例,在多线程并**况下,如果有一个线程在修改ArrayList集合的结构(插入、移除...),而另一个线程正在用迭代器遍历读取集合中的元素,此时将抛出ConcurrentModificationException异常导致迭代遍历失败;

ArrayList.Itr迭代器快速失败源码及例子

查看ArrayList的Itr迭代器源码,可以看到Itr为ArrayList的私有内部类,有一个expectedModCount成员属性,在迭代器对象创建的时候初始化为ArrayList的modCount,即当迭代器对象创建的时候,会将集合修改次数modCount存到expectedModCount里,然后每次遍历取值的时候,都会拿ArrayList集合修改次数modCount与迭代器的expectedModCount比较,如果发生改变,说明集合结构在创建该迭代器后已经发生了改变,直接抛出ConcurrentModificationException异常,如下代码;

    final void checkForComodification() {      if (modCount != expectedModCount)        throw new ConcurrentModificationException();    }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:【JAVA集合】集合迭代器快速失败行为及CopyOnWriteArrayList

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。