• 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/
  • 相关阅读:
    springboot集成kafka
    elasticsearch http 搜索 测试
    linux下安装Elasticsearch
    laravel_admin 使用
    laravel 数据操作
    Win10+apache+PHP+Mysql
    laravel 坑(一)
    下载CentOS镜像
    window10 家庭版 添加Hyper-V虚拟机
    Win10 Composer 下载安装
  • 原文地址:https://www.cnblogs.com/qq503665965/p/6443021.html
Copyright © 2020-2023  润新知