集合类线程安全问题

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 这个类

 

posted @ 2020-06-17 11:08  叮叮叮叮叮叮当  阅读(109)  评论(0编辑  收藏  举报