背景:
ArrayList不是线程安全的,Collections.SynchronizedList虽然是线程安全的,但是只是简单地对所有方法内部加了Synchronized同步块,这样做虽然可以保证线程安全,但是也就意味着同一时间只能有一个线程来操作该list,并发效率低。
Collections.SynchronizedList顶多算是线程安全容器,算不上是并发容器。所以,才有了我们今天的主角:CopyOnWriteArrayList。
CopyOnWriteArrayList具体实现
CopyOnWriteArrayList是一种ArrayList,采用了CopyOnWrite机制,也就是写时复制机制。简单来说就是,读的时候与普通的ArrayList一样,写的时候要进行加锁,在加锁的同步块里面把原来的数组复制到一个新的数组里,在新的数组中新增或删除了指定的值,最后更改一下CopyOnWriteArrayList里面的引用array的指向。