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

    技术2025-11-07  24

    理解

    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); } }

    常用方法

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

    Processed: 0.017, SQL: 9