下面的程序报并发修改异常:java.util.ConcurrentModificationException

原因是:多个线程争抢同一个资源,没加锁

 package juc02;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 下面的程序会报并发修改异常:java.util.ConcurrentModificationException,证明了ArrayList是线程不安全的,解决办法有两种
 * 1. List list1 = Collections.singletonList(new ArrayListTest()); 使用集合工具类Collections.singletonList将普通的ArrayList转换为线程安全的集合
 * 2. List list2 = new CopyOnWriteArrayList(); 使用并发容器CopyOnWriteArrayList代替ArrayList
 * 3. 直接使用Vector<>(),这是线程安全的
 */
public class ArrayListTest {
    public static void main(String[] args) {
        List list = new ArrayList();
        for (int i = 0; i < 40; i++) {
            new Thread(()-> {
                list.add(UUID.randomUUID().toString().substring(0,8));
                System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
} 
最后修改日期:2020-07-13

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。