Почему в методе 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: Если мы окажемся в другом месте, это означает, что мы не изменили массив элементов, тогда почему нам нужно сбросить значение переменного массива?