java.util.ConcurrentModificationException 解决方案

原创 2017年01月03日 13:27:09

在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。

则使用会报以下异常:
Java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
        at java.util.HashMap$KeyIterator.next(HashMap.java:828)

例如以下程序(转自互联网):

[java] view plain copy
  1. mport java.util.*;  
  2.   
  3. public class Main  
  4. {  
  5. public static void main(String args[])  
  6. {  
  7. Main main = new Main();  
  8. main.test();  
  9. }  
  10.   
  11. public void test()  
  12. {  
  13. Map bb = new HashMap();  
  14. bb.put("1""wj");  
  15. bb.put("2""ry");  
  16. Iterator it = bb.keySet().iterator();  
  17. while(it.hasNext()) {  
  18. Object ele = it.next();  
  19.             bb.remove(ele);    //wrong  
  20. }  
  21. System.out.println("Success!");  
  22. }  
  23. }  

原因:Iterator做遍历的时候,HashMap被修改(bb.remove(ele), size-1),Iterator(Object ele=it.next())会检查HashMap的size,size发生变化,抛出错误ConcurrentModificationException。


解决办法:

1) 通过Iterator修改Hashtable
while(it.hasNext()) {
Object ele = it.next();
            it.remove();
}

2) 根据实际程序,您自己手动给Iterator遍历的那段程序加锁,给修改HashMap的那段程序加锁。


3) 使用“ConcurrentHashMap”替换HashMap,ConcurrentHashMap会自己检查修改操作,对其加锁,也可针对插入操作。
import java.util.concurrent.*;

android细节之java.util.ConcurrentModificationException异常

今天在做android项目的时候,遇到了这个异常,好吧,其实平常遇到最多的异常是IllegalstateException,都是跟我们硬件相连的SDK抛出来的,把我折磨的欲生欲死啊。扯远了。说回到今天...
  • yundomo
  • yundomo
  • 2014年08月12日 05:54
  • 1645

java.util.ConcurrentModificationException 异常解决办法及原理(顶)

最近在修程序的bug,发现后台抛出以下异常: Exception in thread "main" java.util.ConcurrentModificationException at jav...
  • a137268431
  • a137268431
  • 2015年10月23日 10:24
  • 716

java.util.ConcurrentModificationException解决方案

在做一个hibernate+struts的小模块中有一个需求,需要在一个Set类型的集合中删除满足条件的对象,于是想当然地想到直接调用 Set的remove(Object o)方法将指定的对象删除即...
  • Before_Morning
  • Before_Morning
  • 2014年09月04日 11:00
  • 318

HashMap报错:java.util.ConcurrentModificationException

HashMap是线程不安全的 ,那么为什么说它是线程不安全的呢?       首先来看一下官方API有关HashMap线程不安全的描述: Note that this implementation ...
  • dyingfair
  • dyingfair
  • 2017年02月22日 15:37
  • 383

java基础——java.util.ConcurrentModificationException

在编写代码的时候,有时候会遇到List里有符合条件的的对象,就移除改对象! 但是这中操作如:使用了 List 的remove,会导致一些很严重的问题!...
  • u010648555
  • u010648555
  • 2016年11月24日 18:12
  • 1269

(转)java.util.ConcurrentModificationException 解决办法

在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。则使用会报以下异常: java.util.ConcurrentModifi...
  • qq_35039122
  • qq_35039122
  • 2017年02月22日 11:58
  • 137

Java迭代foreach原理解析(java.util.ConcurrentModificationException的原因)

java.util.ConcurrentModificationException、Java迭代器
  • z55887
  • z55887
  • 2016年02月16日 19:34
  • 1524

有关java.util.ConcurrentModificationException

有关java.util.ConcurrentModificationException java doc对这个类的定义: This exception may be thrown by metho...
  • doctor_who2004
  • doctor_who2004
  • 2016年03月06日 11:21
  • 2186

java.util.ConcurrentModificationException异常分析

Java在操作ArrayList、HashMap、TreeMap等容器类时,遇到了java.util.ConcurrentModificationException异常。以ArrayList为例,如下...
  • kingzone_2008
  • kingzone_2008
  • 2014年11月22日 00:45
  • 35323

java.util.ConcurrentModificationException 异常解决办法及原理

最近在修程序的bug,发现后台抛出以下异常: Exception in thread "main" java.util.ConcurrentModificationException at java...
  • yuechang5
  • yuechang5
  • 2014年11月09日 20:28
  • 1753
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java.util.ConcurrentModificationException 解决方案
举报原因:
原因补充:

(最多只允许输入30个字)