ArrayList 是我们常用的工具类之一,但是在多线程的情况下,ArrayList 作为共享变量时,并不是线程安全的。主要有以下两个原因:
1、ArrayList 自身的 elementData、size、modCount 在进行操作的时候,都没有加锁 ;
2、 这些变量没有被 volatile 修饰,在多线程的情况下,对这些变量操作可能会出现值被覆盖的情况 ;
如果我们想在多线程情况下使用 ArrayList 怎么办?有以下几种办法:
用 Collections.SynchronizedList ;
用 JUC 下的 CopyOnWriteArrayList ;
先来看看 Synchron