首页 > 其他 > 详细

CopyOnWriteArrayList 源码解析

时间:2021-09-02 01:21:53      阅读:4      评论:0      收藏:0      [点我收藏+]

CopyOnWriteArrayList是并发安全的List,其底层数据的存储仍然是靠Object[],重点在于它如何实现并发安全的,还是比较简单的

1.初始化

技术分享图片

我们可以看到其实就是创建了一个长度为0的数组

2.add元素

技术分享图片

每次添加元素都会加锁,同时调用Arrays.copyOf方法将原数组的内容拷贝到新数组中,新数组的长度是 原数组长度+1,然后把array指向这个新数组

3.修改制定元素

技术分享图片

也是每次修改前加锁,需要注意的是并不是直接修改原数组的元素,而是clone出一个新数组,修改新数组的元素

4.删除元素

技术分享图片

思路基本相同,加速,创建新数组,将原数组元素拷贝过去

5.迭代的弱一致性

迭代的弱一致性指的是,由于CopyOnWriteArrayList每次修改使通过复制原数组到新数组的方式实现的,所以在一个线程获取迭代器Iterator后,其他线程对CopyOnWriteArrayList的修改对Iterator是不可见的
技术分享图片

技术分享图片

由于CopyOnWriteArrayList每次修改元素的开销还是挺大的,所以CopyOnWrite并发容器也常被用于读多写少的并发场景。

CopyOnWriteArrayList 源码解析

原文:https://www.cnblogs.com/wangstudyblog/p/15206464.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!