CopyOnWriteArrayList
是ArrayList
的线程安全版本,通过使用重入锁在添加、修改数据时加锁复制一份原始数组更新完数据后再替换原始数组,可见其比较适合读多写少的场景。
继承关系如下:
主要属性
1 | public class CopyOnWriteArrayList<E> |
构造器
1 | public CopyOnWriteArrayList() { |
添加元素
1 | public boolean add(E e) { |
更新元素
1 | public E set(int index, E element) { |
删除元素
1 | public E remove(int index) { |
总结
- 使用
ReentrantLock
重入锁保证线程安全 - 写操作先拷贝一份数据 更新完毕后 替换原始数组 空间复杂度O(n) 性能低下
- 读操作支持随机访问 时间复杂度O(1)
- 采用读写分离思想,读不加锁 写加锁且占用较大内存空间 故适合读多写少的场景
- 只保证最终一致 不能保证实时一致