文章目录
故障现象:
public class ContainerDemo {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 100; i++) {
new Thread(() -> {
list.add(random.nextInt(10));
System.out.println(list);
}).start();
}
}
}
发现报: java.util.ConcurrentModificationException
导致原因分析:
并发修改导致的异常。
解决方案:
1、使用自带动态扩容的数组 vector()
new vector();
2、使用集合工具类来加持list 为可同步的 list
Collections.synchronizedList(new ArrayList<>());
3、直接使用并发包下的写时复制 list (推荐)
new CopyOnWriteArrayList<>();
优化建议:
在读多写少的时候推荐使用 CopeOnWriteArrayList 这个类。