CopyOnWriteArrayList - это потокобезопасный вариант ArrayList, в котором все мутативные операции (добавление, установка и т. Д.) Реализуются путем создания новой копии базового массива.
CopyOnWriteArrayList - это параллельная альтернатива синхронизированного List, реализующего интерфейс List и его часть пакета java.util.concurrent и его потокобезопасную коллекцию.
public class CopyOnWriteArrayList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
CopyOnWriteArrayList является отказоустойчивым и не генерирует исключение ConcurrentModificationException, когда базовый CopyOnWriteArrayList изменяется во время итерации, используя отдельную копию ArrayList.
Это обычно слишком дорого, потому что массив копий, включающий каждую операцию обновления, будет клонированной копией. CopyOnWriteArrayList - лучший выбор только для частых операций чтения.
/**
* Returns a shallow copy of this list. (The elements themselves
* are not copied.)
*
* @return a clone of this list
*/
public Object clone() {
try {
@SuppressWarnings("unchecked")
CopyOnWriteArrayList<E> clone =
(CopyOnWriteArrayList<E>) super.clone();
clone.resetLock();
return clone;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}