什么是Copy-on-Write
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章给大家介绍什么是Copy-on-Write,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。简介: Copy-on-Write所谓 Copy-on-Write, 很简单,顾名
千家信息网最后更新 2024年09月22日什么是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安全错误
数据库的锁怎样保障安全
2019网络安全法律法规
思成杯网络安全知识竞赛试题
深圳十大网络安全公司排名
最新网络安全技术交流
剑网三最好的dbm数据库
服务器电源的输出电压及电流
珠海来来网网网络技术有
数据库清空表数据
mysql 服务器命令
网络安全宣传周毕节
kis专业版怎么清除数据库
全球身份证件数据库
南京crm软件开发机构
网络安全进校园的主题班会
linux网络服务器安全加固
诛仙手游小米服务器
便捷的选择数据库的方法
阿里云数据库主备切换
宁波沃慕互联网科技
两个串口服务器通过网线连接
数据库常见的安全问题
数据库汇总个数
云南地名 网络安全
吸血鬼崛起怎么搜索服务器
捕鱼软件开发工作室
《大型数据库技术》大作业
平原租房软件开发
福州道道通网络技术
亚马逊云服务器 中国
软件开发乱接项目