直接看代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;
public class ListTest {
static List<String> nomalList = new ArrayList<>();
static List<String> colList = Collections.synchronizedList(new ArrayList<>());
static List<String> copyOnWriteList = new CopyOnWriteArrayList<>();
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(new TestList());
Thread t2 = new Thread(new TestList());
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("【nomalList】:"+nomalList.size());
System.out.println("【colList】:"+colList.size());
System.out.println("【copyOnWriteList】:"+copyOnWriteList.size());
}
public static class TestList implements Runnable {
@Override
public void run() {
for (int i = 0; i < 3000; i++) {
nomalList.add(UUID.randomUUID().toString().substring(0, 5));
colList.add(UUID.randomUUID().toString().substring(0, 5));
copyOnWriteList.add(UUID.randomUUID().toString().substring(0, 5));
}
}
}
}
运行结果:
结论:
可以看出,普通List在多线程的情况下,会出现大小小与预期的情况。