前言
CopyOnWriteArrayList,对于数据修改,会对原有的数据进行复制,将修改的内容写入到副本中,再用副本替换原有的数据。基于这个原理,读写操作不会相互影响。因此读写操作不需要对彼此阻塞。只有写与写之间会阻塞。
适用于读多写少的场景。(读操作没有加锁,写操作有加锁)
核心是System.arrayCopy方法和Arrays.copyOf方法。
源码分析
这里只对一些核心的方法进行分析。
add
在列表的表尾添加元素。
核心是调用Arrays.copyOf方法对原有的数组进行了复制。
- array:transient volatile Object[] 类型。
在指定索引位置上添加元素。
核心除了Arrays.copyOf方法之外,还有System.arrayCopy方法。
remove
删除指定索引位置的元素。
删除指定元素。
set
修改指定索引位置的元素。
get
获取给定索引位置的元素。