关于java.util.ConcurrentModificationException异常
2020-04-23 09:25
826 查看
产生ConcurrentModificationException的原因就是:
执行remove(Object o)方法之后,modCount和expectedModCount不相等了。然后当代码执行到next()方法时,判断了checkForComodification(),发现两个数值不等,就抛出了该
Exception
。
要避免这个Exception
,就应该使用remove()方法。
解决:使用Iterator的remove方法;
下面是网上的其他解释,更能从本质上解释原因:
Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator
被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭
代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出 java.util.
ConcurrentModificationException 异常。
所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法 remove() 来删除对象, Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。
http://gceclub.sun.com.cn/yuanchuang/week-14/iterator.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 关于Map表循环过程删除操作出现的java.util.ConcurrentModificationException 异常
- 关于出现List的java.util.ConcurrentModificationException异常问题的解决
- java.util.ConcurrentModificationException异常处理,备忘录
- java.util.ConcurrentModificationException异常
- Java中的java.util.ConcurrentModificationException异常
- java.util.ConcurrentModificationException异常的处理
- java迭代器异常 java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry
- java.util.ConcurrentModificationException ,遍历集合并同时修改集合,并发造成的异常解决办法
- java.util.ConcurrentModificationException异常 分析
- 从ArrayList中删除对象报java.util.ConcurrentModificationException异常解决
- JAVA List 一边遍历一边删除元素,报java.util.ConcurrentModificationException异常
- 主题:java.util.ConcurrentModificationException 异常解决办法
- 从ArrayList中删除对象报java.util.ConcurrentModificationException异常解决
- java.util.ConcurrentModificationException异常分析
- java.util.ConcurrentModificationException异常分析
- 为什么会出现 java.util.ConcurrentModificationException 异常?
- [实习纠错日记]关于java.util.ConcurrentModificationException的错误
- 为什么会出现 java.util.ConcurrentModificationException 异常?
- 【转】java.util.ConcurrentModificationException异常原因
- 遍历Map时抛出java.util.ConcurrentModificationException异常的解决办法