Kotlin-Demo/bunny/thread/ThreadTest4.java

44 lines
1.8 KiB
Java
Raw Normal View History

2024-08-19 16:57:52 +08:00
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<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 1000; j++) {
list.add(j);
}
}
// 线程添加数组
ArrayList<Integer> list1 = new ArrayList<>();// 会有竞争条件
ConcurrentLinkedQueue<Integer> concurrentLinkedQueue = new ConcurrentLinkedQueue<>();// 不会出现竞争条件
CopyOnWriteArrayList<Integer> copyOnWriteArrayList = new CopyOnWriteArrayList<>();// 不会出现竞争条件
List<Integer> 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());
}
}