zoukankan      html  css  js  c++  java
  • java.util.ConcurrentModificationException 解决办法

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

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

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

    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. }  
    mport java.util.*;
    
    public class Main
    {
    public static void main(String args[])
    {
    Main main = new Main();
    main.test();
    }
    
    public void test()
    {
    Map bb = new HashMap();
    bb.put("1", "wj");
    bb.put("2", "ry");
    Iterator it = bb.keySet().iterator();
    while(it.hasNext()) {
    Object ele = it.next();
                bb.remove(ele);    //wrong
    }
    System.out.println("Success!");
    }
    }

    原因: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.*;

  • 相关阅读:
    Saltstack module acl 详解
    Saltstack python client
    Saltstack简单使用
    P5488 差分与前缀和 NTT Lucas定理 多项式
    CF613D Kingdom and its Cities 虚树 树形dp 贪心
    7.1 NOI模拟赛 凸包套凸包 floyd 计算几何
    luogu P5633 最小度限制生成树 wqs二分
    7.1 NOI模拟赛 dp floyd
    springboot和springcloud
    springboot集成mybatis
  • 原文地址:https://www.cnblogs.com/huideng/p/4498104.html
Copyright © 2011-2022 走看看