java.util.ConcurrentModificationException

在使用集合时可能会出现并发异常,原因是:在添加和移除时有可能同时进行,例如在主线程中添加的同时在子线程中移除元素。
解决方法;使用到Iterator
List的集合:

private List<String> list = new ArrayList<>();
ListIterator<String> iterator = list.listIterator();
                while (iterator.hasNext()) {
                    String next = iterator.next();
                    if (file.getAbsolutePath().equals(next)) {
                        iterator.remove();
                        LogUtil.d("createTest", "next========" + next);
                    }
                }

map的集合;
第一种:跟list集合一样

Map<String, Integer> map=new HashMap<>();
Set<Entry<String, Integer>> set=map.entrySet();
Iterator<Entry<String, Integer>> iterator=set.iterator();

while(iterator.hasNext()){
    Entry<String, Integer> entry=iterator.next();
    String name=entry.getKey();
    if(name.contains("李")){
    //特别注意:不能使用map.remove(name)  否则会报同样的错误
        iterator.remove();
    }
}

第二种: 使用“ConcurrentHashMap”替换HashMap,ConcurrentHashMap会自己检查修改操作,对其加锁,也可针对插入操作。

private Map<String, Integer> map = new ConcurrentHashMap<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
            Integer value = entry.getValue();
            if (value>3){
                return;
            }
            entry.setValue(++value);
        }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 九种基本数据类型的大小,以及他们的封装类。(1)九种基本数据类型和封装类 (2)自动装箱和自动拆箱 什么是自动装箱...
    关玮琳linSir阅读 2,107评论 0 47
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 43,019评论 11 349
  • 传送门 解读阿里Java开发手册(v1.1.1) - 异常日志 前言 阿里Java开发手册谈不上圣经,但确实是大量...
    kelgon阅读 4,519评论 4 50
  • 一、音标的整体介绍: 大类1、元音;2、辅音【元音(Vowel)和辅音( Consonant)的定义: 发音时声带...
    mikezhan阅读 2,081评论 0 0
  • 叶落繁根泪,埋痛一夜酒 悲有几时尽,惊长十年秋
    药尘尘阅读 242评论 0 0

友情链接更多精彩内容