zoukankan      html  css  js  c++  java
  • java中的ConcurrentModificationException异常

    先看这样一段代码:

    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("2");
    for (String temp : list) {
        if("1".equals(temp)){
          list.remove(temp);
        }
    }

    这是对一个集合进行简单迭代,当集合中的某一个元素与“1”相等则移除该元素,程序运行正常;此时我们把“1”换成“2”:

    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("2");
    for (String temp : list) {
        if("2".equals(temp)){
          list.remove(temp);
        }
    }

    系统出现java.util.ConcurrentModificationException异常。某个线程在 Collection 上进行迭代时,通常不允许另一个线性修改该 Collection。通常在这些情况下,迭代的结果是不确定的。如果检测到这种行为,一些迭代器实现(包括 JRE 提供的所有通用 collection 实现)可能选择抛出此异常。执行该操作的迭代器称为快速失败 迭代器,因为迭代器很快就完全失败,而不会冒着在将来某个时间任意发生不确定行为的风险。这是JDK API对ConcurrentModificationException的举例说明。

    产生的原因可参考http://blog.csdn.net/izard999/article/details/6708738。

    若要避免此异常可使用Iterator进行操作:

    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("2");
    Iterator<String> it = a.iterator();
    while(it.hasNext()){
        String temp = it.next();
        if("2".equals(temp)){
            it.remove();
        }
    }     
    本文为博主原创文章,转载请在明显位置注明出处: http://www.cnblogs.com/qq503665965/
  • 相关阅读:
    洛谷 P1037 产生数
    阿里实习储备知识
    腾讯后台开发面试总结(别人的)
    两个栈实现队列的功能
    栈里的元素升序排列
    二叉树路径和
    硬币组合问题
    九月十月百度,迅雷,华为,阿里巴巴笔试面试六十题(第411~470题)
    轻松搞定面试中的二叉树题目
    july教你如何迅速秒杀掉:99%的海量数据处理面试题
  • 原文地址:https://www.cnblogs.com/qq503665965/p/6443021.html
Copyright © 2011-2022 走看看