Warum setArray () -Methodenaufruf in CopyOnWriteArrayList @ erforderli

In CopyOnWriteArrayList.java, im Methodensatz (int index, E-Element) unter

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();
    }
}

Warum ist der Aufruf von setArray () erforderlich? Ich konnte den Kommentar über diesen Methodenaufruf nicht verstehen. Weil wir keinen synchronisierten Block verwenden, müssen wir alle Variablen, die wir verwenden, manuell leeren? Bei der obigen Methode werden wiedereintretende Sperren verwendet. Wenn sie eine synchronisierte Anweisung verwendet haben, müssen sie dennoch die Methode setArray () aufrufen. Ich denke nicht

Frage 2: Wenn wir an anderer Stelle landen, bedeutet dies, dass wir das Array elements nicht geändert haben. Warum müssen wir dann den Wert des variablen Arrays leeren?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage