JAVA COW(写时复制)容器介绍

1.什么是COW?

Copy-On-Write简称COW。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。


2.COW的实现原理

从上边的源码可以看出来,添加新的元素的时候,需要加锁,这个锁是独占锁,防止线程重入造成写冲突以及复制多个副本。


读的时候不需要加锁,如果读的时候有多个线程正在向ArrayList添加数据,读还是会读到旧的数据,因为写的时候不会锁住旧的ArrayList。


3.COW的应用场景

CopyOnWrite并发容器用于读多写少的并发场


4.COW的缺陷

很明显,在写场合,复制整个数组的开销是很大的,因此需要注意。




猜你喜欢

转载自blog.csdn.net/piqianming/article/details/79844626
今日推荐