前言

CopyOnWriteArrayList,对于数据修改,会对原有的数据进行复制,将修改的内容写入到副本中,再用副本替换原有的数据。基于这个原理,读写操作不会相互影响。因此读写操作不需要对彼此阻塞。只有写与写之间会阻塞。

适用于读多写少的场景。(读操作没有加锁,写操作有加锁)

核心是System.arrayCopy方法和Arrays.copyOf方法。


源码分析

这里只对一些核心的方法进行分析。

add

并发线程 - CopyOnWriteArrayList

在列表的表尾添加元素。

核心是调用Arrays.copyOf方法对原有的数组进行了复制。

并发线程 - CopyOnWriteArrayList

  • array:transient volatile Object[] 类型。

并发线程 - CopyOnWriteArrayList


并发线程 - CopyOnWriteArrayList

在指定索引位置上添加元素。

核心除了Arrays.copyOf方法之外,还有System.arrayCopy方法。


remove

并发线程 - CopyOnWriteArrayList

删除指定索引位置的元素。


并发线程 - CopyOnWriteArrayList

删除指定元素。

并发线程 - CopyOnWriteArrayList


set

并发线程 - CopyOnWriteArrayList

修改指定索引位置的元素。


get

并发线程 - CopyOnWriteArrayList

获取给定索引位置的元素。

并发线程 - CopyOnWriteArrayList

相关文章: