public class ListNotSafe {
public static void main(String[] args) {
List<String> list = new CopyOnWriteArrayList<>();
//java.util.ConcurrentModificationException 并发修改异常 ArrayList线程不安全
for(int i = 1; i <= 300; ++i){
new Thread(() -> {
list.add(UUID.randomUUID().toString().substring(0, 8));
System.out.println(list);
}, String.valueOf(i)).start();
}
}
}
// CopyOnWriteArrayList 的 add() 方法的源码
public boolean add(E e) {
synchronized (lock) {
Object[] es = getArray();
int len = es.length;
es = Arrays.copyOf(es, len + 1);
es[len] = e;
setArray(es);
return true;
}
}