In ArrayBlockingQueue, warum das letzte Elementfeld in die lokale letzte Variable kopieren?

ImArrayBlockingQueue, alle Methoden, für die die Sperre erforderlich ist, kopieren sie in ein lokalesfinal Variable vor dem Aufruf vonlock().

public boolean offer(E e) {
    if (e == null) throw new NullPointerException();
    final ReentrantLock lock = this.lock;
    lock.lock();
    try {
        if (count == items.length)
            return false;
        else {
            insert(e);
            return true;
        }
    } finally {
        lock.unlock();
    }
}

Gibt es einen Grund zum Kopieren von this.lock zu einer lokalen Variablenlock wenn das Feldthis.lock istfinal?

Zusätzlich wird auch eine lokale Kopie von @ verwendeE[] bevor Sie darauf einwirken:

private E extract() {
    final E[] items = this.items;
    E x = items[takeIndex];
    items[takeIndex] = null;
    takeIndex = inc(takeIndex);
    --count;
    notFull.signal();
    return x;
}

Gibt es einen Grund, ein endgültiges Feld in eine lokale endgültige Variable zu kopieren?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage