乐码库:一个极速、放心、纯净的下载站! 更新: 资源发布
  • 您的位置:首页 > 技术文档 > 服务器 > java.util.ConcurrentModificationException 解决方法
  • 收藏本页
      java.util.ConcurrentModificationException 解决方法
      发布时间:2016-12-21 08:08:06 关键词: java.util.ConcurrentModificationException,问题,java.util错误解决方法
      内容简介:这篇文章主要介绍了 java.util.ConcurrentModificationException 解决方法的相关资料,需要的朋友可以参考下

     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)
    

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

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

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

      最新更新
      热门排行榜