java.util.ConcurrentModificationException【bug】

简介: java.util.ConcurrentModificationException【bug】

场景

集合类不安全的问题

推荐

第二季:4我们知道ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案。【Java面试题】

问题

并发修改异常

package arraylist4;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
/**
 * 集合类不安全的问题
 * ArrayList
 */
public class ContainerNotSafeDemo {
    public static void main(String[] args) {
//        List<String> list= Arrays.asList("a","b","c");
//        list.forEach(System.out::println);
        List<String> list=new ArrayList<>();
//        list.add("a");
//        list.add("b");
//        list.add("c");
//
//        for (String element:list) {
//            System.out.println(element);
//        }
        //forthread10
        for (int i = 1; i <= 30; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,8));
                System.out.println(list);
            },String.valueOf(i)).start();
        }
        //java.util.ConcurrentModificationException
    }
}

解决方案

package arraylist4;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
/**
 * 集合类不安全的问题
 * ArrayList
 */
public class ContainerNotSafeDemo {
    public static void main(String[] args) {
        List<String> list=new CopyOnWriteArrayList<>();
        for (int i = 1; i <= 30; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,8));
                System.out.println(list);
            },String.valueOf(i)).start();
        }
        //java.util.ConcurrentModificationException
        /*
         * 1 故障现象
         *      java.util.ConcurrentModificationException
         * 2 导致原因
         *
         * 3 解决方案
         *   3.1 List<String> list=new Vector<>();
         *   3.2 List<String> list=Collections.synchronizedList(new ArrayList<>());
         *   3.3 List<String> list=new CopyOnWriteArrayList<>();
         *
         * 4 优化建议(同样的错误不犯第2次)
         */
    }
}
相关文章
|
19天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
31 0
|
8月前
|
Cloud Native Java Go
那些年,我们追过的Java BUG
那些年,我们追过的Java BUG
58 0
|
8月前
|
算法 搜索推荐 Java
Java8 到 Java17 升级指南(Bug大全)
Java8 到 Java17 升级指南(Bug大全)
261 0
|
20天前
|
Java Maven
[Java ] jdk升级 bug java: -source 8 中不支持 instanceof 中的模式匹配 (请使用 -source 16 或更高版本以启用 instanceof 中的模式匹配)
[Java ] jdk升级 bug java: -source 8 中不支持 instanceof 中的模式匹配 (请使用 -source 16 或更高版本以启用 instanceof 中的模式匹配)
161 0
|
8月前
|
SQL 前端开发 Java
JSP缺陷问题(bug)管理系统myeclipse开发sql数据库BS模式java编程MVC结构
JSP 缺陷问题(bug)管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库采用 serlvet dao bean MVC模式进行开发,系统主要采用B/S模式开发。
32 0
|
11月前
|
Java API 容器
java项目排查bug
java项目排查bug
96 0
|
11月前
|
缓存 Java 数据库连接
JAVA-定位排查bug
JAVA-定位排查bug
|
测试技术
JavaWeb - Hutool Bug HttpResponse body 方法中文乱码
JavaWeb - Hutool Bug HttpResponse body 方法中文乱码
709 0
|
Java
Netty「源码阅读」之怎么解决 Java 的 epoll 空轮询 bug
Netty「源码阅读」之怎么解决 Java 的 epoll 空轮询 bug
696 0
|
SQL 缓存 前端开发
java枚举触发了Mybatis Plus的BUG折腾了我三个小时,怀疑人生
java枚举触发了Mybatis Plus的BUG折腾了我三个小时,怀疑人生
764 0
java枚举触发了Mybatis Plus的BUG折腾了我三个小时,怀疑人生