package bunny.thread; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.CopyOnWriteArrayList; public class ThreadTest4 { public static void main(String[] args) throws Exception { // 同步添加数组 ArrayList list = new ArrayList<>(); for (int i = 0; i < 10; i++) { for (int j = 0; j < 1000; j++) { list.add(j); } } // 线程添加数组 ArrayList list1 = new ArrayList<>();// 会有竞争条件 ConcurrentLinkedQueue concurrentLinkedQueue = new ConcurrentLinkedQueue<>();// 不会出现竞争条件 CopyOnWriteArrayList copyOnWriteArrayList = new CopyOnWriteArrayList<>();// 不会出现竞争条件 List synchronizedList = Collections.synchronizedList(list);// 这个数组内容会是正常的两倍(没有竞争条件的数组),因为复制的是之前存在的数组 for (int i = 0; i < 10; i++) { new Thread(() -> { for (int j = 0; j < 1000; j++) { list1.add(j); copyOnWriteArrayList.add(j); synchronizedList.add(j); concurrentLinkedQueue.add(j); } }).start(); } Thread.sleep(1000); System.out.println("list 长度:" + list.size()); System.out.println("list1 长度:" + list1.size()); System.out.println("copyOnWriteArrayList 长度:" + copyOnWriteArrayList.size()); System.out.println("synchronizedList 长度:" + synchronizedList.size()); System.out.println("concurrentLinkedQueue 长度:" + concurrentLinkedQueue.size()); } }