猿问

CopyOnWriteArrayList类set方法疑惑

在CopyOnWriteArrayList类的set方法中有一段setArray(elements)代码,实际上这段代码并未对elements做任何改动,实现的volatile语意并不对CopyOnWriteArrayList实例产生任何影响,为什么还是要保留这行语句?

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 {
       // 就是这一段代码
setArray(elements); } return oldValue; } finally { lock.unlock(); } } private E get(Object[] a, int index) { return (E) a[index]; } final void setArray(Object[] a) { array = a; }
慕妹3146593
浏览 1057回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答