欢迎光临
我们一直在努力

CopyOnWriteArrayList源码学习

参数及其含义

  • 可重入互斥锁。用于并发控制。保证操作的原子性。
  • final transient ReentrantLock lock = new ReentrantLock();

  • 对象数组,存储元素对象。加上volatile关键字,保证并发过程中数据的可见性。
  • private transient volatile Object[] array;

    常用方法

  • 构造函数
  • public CopyOnWriteArrayList() {


    setArray(new Object[0]);
    }

    以无参构造函数为例,调用setArray方法给array变量赋值。

  • add方法
  • public boolean add(E e) {


    final ReentrantLock lock = this.lock;
    lock.lock();
    try {


    Object[] elements = getArray();
    int len = elements.length;
    Object[] newElements = Arrays.copyOf(elements, len + 1);
    newElements[len] = e;
    setArray(newElements);
    return true;
    } finally {


    lock.unlock();
    }
    }

    添加元素到列表中。首先获取锁final ReentrantLock lock = this.lock;final关键字修饰,意味着引用本身不能改变,即不能再让这个引用指向另一个对象。 lock.lock();对接下来的操作上锁。 try块内核心逻辑:获取当前的数组对象,及其长度。然后将数组复制到一个长度为len+1的新数组中。将元素添加到数组结尾,然后调用setArray方法将数组赋值给array,返回true。 lock.unlock();lock和unlock要成对出现,finally中进行解锁。

  • remove方法
    • 根据索引删除

    public E remove(int index) {

    赞(0)
    未经允许不得转载:171主机测评 » CopyOnWriteArrayList源码学习
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址