import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; public class JucTest3 { public static void main(String[] args) { /** * 在多线程下ArrayList不安全会发生同步修改异常ConcurrentModificationException * 原因: * 解决方式: * 1,使用Vector代替ArrayList,底层是使用synchronized来实现同步的,效率比较低 * 2,使用工具类将其转成安全的:List<String> list = Collections.synchronizedList(new ArrayList<>()); * 3,使用JUC下的CopyOnWriteArrayList:List<String> list = new CopyOnWriteArrayList<>();,使用lock实现同步,效率高 * 它会在写入的时候,避免多线程下同时写入,将其它线程写入的数据覆盖,所以如果该线程想要写入数据时,它只能将数据复制一份出来 * 在复制的数据上面做出修改后,再同步会原来的数据中 */ List<String> list = new CopyOnWriteArrayList<>(); for(int i=0;i<20;i++) { new Thread(()->{ list.add(UUID.randomUUID().toString().substring(0,5)); System.out.println(list); },String.valueOf(i)).start(); } } }