Copy-On-Write读写分离策略和CopyOnWriteArrayList源码分析

Copy-On-Write(COW)策略用于并发编程,确保读操作无锁并支持并发读写分离。CopyOnWriteArrayList是Java中的一个COW容器,提供并发读取和线程安全的写操作。在写操作时,它会复制原有容器并进行修改,完成后将新容器替换旧容器,确保读操作不受影响。源码分析显示,其添加、设置和删除操作均根据COW原则实现,读操作不加锁,写操作加锁。
摘要由CSDN通过智能技术生成

Copy-On-Write简称COW,是一种用于程序设计的优化策略。JDK有两种Copy-On-Write容器,CopyOnWriteArrayList和CopyOnWriteArraySet。


Copy-On-Write容器,就是写时复制容器。支持并发的读,如果是写操作,那么会创建一个新的容器,在新的容器中完成写操作,在这个过程中,读操作依然读的是旧容器中的值。完成写操作之后,还会把新容器的引用指向原有容器的引用。这样做的好处就是,可以支持并发的读,而不需要加锁,因为当前容器不会添加或者删除元素。所以Copy-On-Write容器是一种读写分离容器,体现了读写分离的思想。

CopyOnWriteArrayList源码分析:

 private volatile transient Object[] array;
 final Object[] getArray() {
        return array;
 }
final void setArray(Object[] a) {
        array = a;
}

将array设置为私有的,只能通过本类的get和set方法操作array。

  • 更新操作
public E set(int index, E element) {
      final ReentrantLock lock = this.lock;
      lock.lock();
      try {
          Object[] elements = getArray();
          E oldValue = get(elements, index);
          if (oldValue != element) {
              int len = elements.length;
              Object[] newElements = Arrays.copyOf(elements, len);
              newElements[index] = element;
              setArray(newElements);
          } else {
           
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值