Почему в методе CopyOnWriteArrayList требуется вызов метода setArray ()

В CopyOnWriteArrayList.java, в наборе методов (int index, E element) ниже

public E set(int index, E element) {
    final ReentrantLock lock = this.lock;
    lock.lock();
    try {
        Object[] elements = getArray();
        Object oldValue = elements[index];

        if (oldValue != element) {
            int len = elements.length;
            Object[] newElements = Arrays.copyOf(elements, len);
            newElements[index] = element;
            setArray(newElements);
        } else {
            // Not quite a no-op; ensures volatile write semantics
            setArray(elements);----? Why this call required?
        }
        return (E)oldValue;
    } finally {
        lock.unlock();
    }
}

Почему требуется вызов setArray ()? Я не мог понять комментарий, написанный выше этого вызова метода. Это потому, что мы не используем синхронизированный блок, мы должны вручную сбросить все переменные, которые мы используем? В вышеупомянутом методе они используют входящие замки. Если они использовали синхронизированный оператор, нужно ли им вызывать метод setArray ()? Я думаю нет.

Вопрос 2: Если мы окажемся в другом месте, это означает, что мы не изменили массив элементов, тогда почему нам нужно сбросить значение переменного массива?

Ответы на вопрос(1)

Ваш ответ на вопрос