Что могло бы произойти, если бы мы не указали setArray в методе set?
Не могли бы вы написать код, даже используя какой-нибудь вспомогательный семафор, который продемонстрировал бы необходимость использования этой изменчивой записи и вызова setArray?
Ниже приведен код из CopyOnWriteArrayList.java
final transient Object lock = new Object();
private transient volatile Object[] array;
public CopyOnWriteArrayList() { setArray(new Object[0]); }
public E set(int index, E element) {
synchronized (lock) {
Object[] elements = getArray();
E oldValue = elementAt(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); // <------ what is it actually for ? ------
// what If it would me ommited ?
}
return oldValue;
}
}
final void setArray(Object[] a) {
array = a;
}