背景
CopyOnWriteArrayList容器是Collections.synchronizedList(List list)的替代方案。
CopyOnWriteArrayList在某些情况下具有更好的性能(读操作远多于写操作时)。在传统的使用 synchronized 关键字以保证互斥操作的实现中(比如 Vector),通常会把读操作进行加锁,因而任一时刻只能有一个读线程能够获得锁,所以其他的读线程都必须等待,大大影响性能。
CopyOnWriteArrayList称为“写时复制”容器,就是在多线程对容器对象进行读写操作时,执行写操作的线程在写的同时,还会把容器复制一份(并对复制后的容器实例进行写修改操作),最终就可以做到写操作进行的同时,不阻塞其他线程的读操作。
从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。
CopyOnWriteArrayList
CopyOnWriteArrayList实现
先说说CopyOnWriteArrayList容器的实现原理。
简单地说,就是在需要对容器进行操作的时候,将容器拷贝一份,对容器的修改操作都在容器的拷贝副本中进行。当修改操作结束,再用容器的拷贝副本替换掉原来的容器。
这样设计的好处是实现了读写分离,并且读读时不会发生阻塞。
...