请举例说明集合类是不安全的 List<String> list = new ArrayList<>(); for (int i = 0; i <30 ; i++) { new Thread(()->{ list.add(UUID.randomUUID().toString().substring(0,8)); System.out.println(list); },String.valueOf(i)).start(); } 看ArrayList的源码 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } 没有synchronized线程不安全 new Vector<>() 是线程安全的 Collections.synchronizedList(new ArrayList<>()) 线程安全 new CopyOnWriteArrayList<>(); * 写时复制 * CopyOnWrite容器即写时复制的容器。往一个容器添加元素的时候,不直接往当前容器Object[]添加, * 而是先将当前容器Object[]进行Copy,复制出一个新的容器Object[] newElements, 然后向新的容器Object[] newElements里添加元素。 * 添加元素后,再将原容器的引用指向新的容器setArray(newElements)。 * 这样做的好处是可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。 * 所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。