44 lines
1.8 KiB
Java
44 lines
1.8 KiB
Java
|
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());
|
||
|
}
|
||
|
}
|