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.*;

“Oracle 9i/Oracle 10g” 查询 参数java.util.date 性能慢的问题和解决方案

假设我们使用这样的sql通过绑定变量(类型为java.util.date)查询数据库,其中end_date是date类型且建立了索引。 “select count(*) from table1 wh...
  • lzzyok
  • lzzyok
  • 2012年09月29日 09:28
  • 1611

java.util.ConcurrentModificationException异常及解决方案

首先说明一下,这是我在互联网上转载的一篇文章,具体出处请看文章末端。 为什么要写这篇文章呢? 原因如下:当我在遇到这个问题时在互联网上查找了很多资料但都不是很全面需要认真的分析和整理,本来自己想写...

关于java.util.Properties读取中文乱码的正确解决方案(不要再用native2ascii.exe了)

关于java.util.Properties读取中文乱码的正确解决方案(不要再用native2ascii.exe了)...

java.util.ConcurrentModificationException解决方案

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

java java.util.ConcurrentModificationException 原因以及解决方案

原文:http://blog.csdn.net/traceofsun/article/details/5820925 用iterator遍历集合时要注意的地方:不可以对iterator相...
  • Kaiwii
  • Kaiwii
  • 2012年09月20日 14:22
  • 731

【JAVA笔记——道】JAVA原子性解决方案java.util.concurrent.atomic

java.util.concurrent是jdk提供在多线程下的原子性解决方案,java.util.concurrent下主要是常用数据结构的原子性实现类,java.util.concurrent.a...

org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool问题解决方案

今天用maven建立web 工程,分别用Tomcat6,Tomcat7启动,都报错org.apache.tomcat.util.bcel.classfile.ClassFormatExceptio...

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...的解决方案

在执行hdfs dfs 相关命令时会报WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platfor...

linux下打包出现brut.common.BrutException: could not exec command: [/tmp/brut_util_Jar_22418586694498,解决方案

出现了以下错误: I: Using Apktool 2.0.1 I: Checking whether sources has changed... I: Smaling smali folder ...

WARN util.NativeCodeLoader: Unable to load native-hadoop library解决方案

在运行hadoop的时候,出现警告: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java.util.ConcurrentModificationException 解决方案
举报原因:
原因补充:

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