4.5.3写时复制容器CopyOnWriteArrayList和CopyOnWriteArraySet理解、有点和使用场景

理解

CopyOnWrite就是写时复制容器。在写入数据的时候,会从源容器复制出一个新容器,然后在新容器中添加元素,添加完成之后,再让源容器指针指向新容器。

写时复制容器的好处

可以对CopyOnWrite并发读取,而不需要加锁,因为当前容器不会添加任何元素。

这是一种读写分离的思想,读和写分别使用不同的容器

写时复制容器的缺点

1、每次修改都会新建一个数组,如果源数组很大,修改操作比较频繁,性能就会很低,内存会有大开销

2、数据一致性问题:因为修改并不会马上就能够被读到,即只能保证最终一致性,不能保证实时一致性。

适用场景:

多读少写的场景,比如白名单黑名单商品类目的访问,因为大多数是读,偶尔修改;

举例:

假如我们有一个商品的搜索网站,搜索的时候有些关键词是需要被屏蔽掉的,这个时候就可以使用CopyOnWrite存放不能搜索的黑名单,如果用户搜索的关键词在黑名单中,就提示不能搜索

使用写时复制容器需要注意的事情:

1、尽量在初始化的时候指定容器大小,避免容器扩容产生的开销

2、写入数据的时候,最好一次性写入,防止多次复制

demo:把数据放在List中,一次性写入写时复制容器

public class Test {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        CopyOnWriteArrayList copyOnWriteArrayList = new CopyOnWriteArrayList(list);
    }
}

常用方法

写时复制容器常用方法和普通集合差不多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章