news 2026/7/16 10:04:03

COW类并发容器简介及CopyOnWriteArrayList源码分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
COW类并发容器简介及CopyOnWriteArrayList源码分析

COW类并发容器

COW类并发容器,全称:Copy On Write容器,写时复制容器。(读写分离容器)
原理:
向容器中添加元素时,先将容器进行复制,复制出一个新容器,然后将元素添加到新容器中,再将原容器的引用指向新容器。
并发读的时候不需要锁定容器,因为原容器没有变化,所以可以读取原容器中的值,使用的是一种读写分离的思想。
注意:
CopyOnWrite容器只能保证数据的最终一致性,不能保证数据实时一致性。
所以如果你希望写入的的数据,马上能读到,请不要使用CopyOnWrite容器。

CopyOnWriteArrayList源码分析

publicclassCopyOnWriteArrayList<E>{//底层基于数组实现的privatetransientvolatileObject[]array;publicCopyOnWriteArrayList(){setArray(newObject[0]);}finalvoidsetArray(Object[]a){array=a;// array = new Object[0]}//add方法:publicbooleanadd(Ee){finalReentrantLocklock=this.lock;lock.lock();try{//返回底层array数组,给了elementsObject[]elements=getArray();//获取elements的长度---》获取老数组的长度intlen=elements.length;//完成数组的复制,将老数组中的元素复制到新数组中,并且新数组的长度加1操作Object[]newElements=Arrays.copyOf(elements,len+1);//将e元素放入新数组最后位置newElements[len]=e;//array数组的指向从老数组变为新数组setArray(newElements);returntrue;}finally{lock.unlock();}}finalObject[]getArray(){returnarray;//返回底层数组}privatebooleanaddIfAbsent(Ee,Object[]snapshot){finalReentrantLocklock=this.lock;lock.lock();try{//取出array数组给currentObject[]current=getArray();intlen=current.length;if(snapshot!=current){// Optimize for lost race to another addXXX operationintcommon=Math.min(snapshot.length,len);//遍历老数组:for(inti=0;i<common;i++)//eq(e, current[i])将放入的元素和老数组的每一个元素进行比较,如果有重复的元素,就返回false,不添加了if(current[i]!=snapshot[i]&&eq(e,current[i]))returnfalse;if(indexOf(e,current,common,len)>=0)returnfalse;}//完成数组的复制,将老数组中的元素复制到新数组中,并且新数组的长度加1操作Object[]newElements=Arrays.copyOf(current,len+1);//将e元素放入新数组最后位置newElements[len]=e;//array数组的指向从老数组变为新数组setArray(newElements);returntrue;}finally{lock.unlock();}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 17:25:31

Python自动化测试实战指南:从入门到精通

Python自动化测试实战指南&#xff1a;从入门到精通 【免费下载链接】Python自动化测试教程完整版PDF 本仓库提供了一份名为“Python自动化测试教程 完整版PDF”的资源文件。该教程专注于使用Python和Selenium进行自动化测试&#xff0c;适合希望快速上手自动化测试的测试人员。…

作者头像 李华
网站建设 2026/7/13 4:57:23

智能家居设备联动API设计:跨品牌设备协同控制的技术实现

智能家居设备联动API设计&#xff1a;跨品牌设备协同控制的技术实现 【免费下载链接】OpenAPI-Specification 项目地址: https://gitcode.com/gh_mirrors/open/OpenAPI-Specification 随着物联网设备的指数级增长&#xff0c;智能家居市场面临着设备生态碎片化的严峻挑…

作者头像 李华
网站建设 2026/7/16 1:24:12

ggplot2数据可视化终极指南:从入门到精通

ggplot2数据可视化终极指南&#xff1a;从入门到精通 【免费下载链接】ggplot2 An implementation of the Grammar of Graphics in R 项目地址: https://gitcode.com/gh_mirrors/gg/ggplot2 ggplot2是R语言中最强大的数据可视化系统&#xff0c;它基于图形语法理论&…

作者头像 李华