集合类线程安全问题

ArrayList的线程安全故障

/**
  * 发现报java.util.ConcurrentModificationException
  */
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();
        }
    }
}

解决方案

  • new Vector();
  • Collections.synchronizedList(new ArrayList<>());
  • new CopyOnWriteArrayList<>();

优化建议

  • 在读多写少的时候推荐使用 CopeOnWriteArrayList 这个类
原文地址:https://www.cnblogs.com/ding-dang/p/13151297.html