什么是Copy-on-Write
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章给大家介绍什么是Copy-on-Write,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。简介: Copy-on-Write所谓 Copy-on-Write, 很简单,顾名
千家信息网最后更新 2025年12月01日什么是Copy-on-Write所谓 Copy-on-Write, 很简单,顾名思义, 就是" 写数据的时候利用拷贝的副本来执行 "。 Java中中常用的就是CopyOnWriteArrayList和 CopyOnWriteArraySet 这两个 Copy-on-Write 容器,它们背后的设计思想就是 Copy-on-Write; 通过 Copy-on-Write 这两个容器实现的读操作是无锁的,由于无锁,所以将读操作的性能发挥到了极致 可以看到在add的时候首先通过cas获取锁,然后获取原数组长度.
调用copyOf将原数组复制到新数组中且长度为原数组长度+1
然后调用setArray方法,也就是说修改的时候实际调用的是源数组的副本,那我们进一步跟进setArray方法 CopyOnWriteArrayList,就是用空间换时间,更新的时候基于副本更新,避免锁,然后最后用volatile变量来赋值保证可见性,适用于读多写少的场景,所以还是要根据实际业务场景,判断哪种适合。
这篇文章给大家介绍什么是Copy-on-Write,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
简介: Copy-on-Write
源码分析:
我们一起看下CopyOnWriteArrayList源码,首先看下add方法:
public boolean add(E e) { final ReentrantLock lock = this.lock; lock.lock(); try { Object[] elements = getArray(); int len = elements.length; Object[] newElements = Arrays.copyOf(elements, len + 1); newElements[len] = e; setArray(newElements); return true; } finally { lock.unlock(); } }/** * Sets the array. */ final void setArray(Object[] a) { array = a; }可以看到在这里直接将新数组复制给array; 那array是谁呢 敲黑板! 划重点来了
private transient volatile Object[] array;
内部静态变量,并且有volatile修饰,那么就可以用volatile写的方式,把这个副本数组赋值给volatile修饰的那个数组的引用变量了。
只要一赋值给那个volatile修饰的变量,立马就会对读线程可见,大家都能看到最新的数组了。
难么在新增的同时有读情求过来呢?会不会阻塞呢?我们接着看get方法:
public E get(int index) {return get(getArray(), index);}final Object[] getArray() {return array;}
根本不会堵塞或者不安全呢,因为修改的时候采用的是源数组的副本,十分简单直接根据下标从内部静态变量array中获取
关于什么是Copy-on-Write就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
数组
副本
变量
时候
就是
方法
长度
两个
内容
场景
实际
容器
更多
源码
静态
帮助
更新
不错
中中
顾名思义
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库三级模式含义
美国互联网科技公司知乎
网络安全数据保护建议
泉州市志腾网络技术有限公司
数据库 全局变量
软件开发师有什么要求
如何查看域名绑定服务器哪个目录
软件开发环境与工具判断题
服务器配置哪些参数
4399服务器数据丢失
同学网络安全教学
html访问数据库例程
行唐软件开发者在线咨询
如何做好数据库的安全性
数据库连接不上但没报错
简述数据库技术发展的趋势
互联网公司用科技助盲人
什么公司生产服务器
怎么用流量攻击服务器
两个数据库如何外码约束
jsp连接数据库心得
暗黑2 不能连接服务器
psn香港服务器
数据库管理大作业有感
科畅网络技术工作室
拱墅区管理软件开发
网络安全法规定保护公共数据资源
凯旋门租房软件开发
天津双线服务器
照片排版软件开发