CopyOnWriteArrayList 源码解析

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

1.初始化

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

2.add元素

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

3.修改制定元素

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

4.删除元素

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

5.迭代的弱一致性

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

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

posted @ 2021-08-30 16:12  刚刚好。  阅读(51)  评论(0编辑  收藏  举报