Copy-On-Write容器的简述

Copy-On-Write简称COW,是一种用于程序设计中的优化策略。

JDK里的COW容器有两种:CopyOnWriteArrayList和CopyOnWriteArraySet。COW容器非常有用,可以在非常多的并发场景中使用到。

下面简单介绍一下什么是COW容器:

CopyOnWrite容器即写时复制的容器。通俗的理解就是当我们往一个容器中添加元素时,不直接往当前容器添加,而是先将当前容器进行复制,复制出一个新的容器,然后往新的容器中添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写是不同的容器。

1、CopyOnWrite容器适合读多写少的场景。如果写多的话,每一次写都需要先复制一份新的容器再进行写操作,那么效率会非常的低,而且资源消耗也大。

2、CopyOnWrite容器,我们像正常操作容器一样即可。

CopyOnWriteArrayList例子,CopyOnWriteArraySet一样的用法:

public class Test {
	public static void main(String[] args) {
		//现在泛型指定为String,所以只能添加String类型数据
		CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>();  
		list.add("a");
		list.add("b");
		list.add("c");
		
		Iterator<String> ie = list.iterator(); //遍历也会正常遍历就行
		while(ie.hasNext()){
			String str = ie.next();
			System.out.println(str);
		}
	}
}

3、添加方法的源码:

我们可以看到关于多线程的写操作,其实我们是不用担心并发问题的,因为方法里都是加上了锁。

猜你喜欢

转载自blog.csdn.net/howinfun/article/details/80716797
今日推荐