CopyOnWriteArrayList - безпечний для потоків варіант ArrayList, в якому всі мутаційні операції (додавання, встановлення тощо) реалізуються шляхом створення нової копії базового масиву.
CopyOnWriteArrayList - це паралельна альтернатива синхронізованого списку реалізацій інтерфейсу списку та його частини пакету java.util.concurrentі його колекції, захищеної від потоків.
public class CopyOnWriteArrayList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
CopyOnWriteArrayList не захищений відмов і не кидає ConcurrentModificationException, коли під CoteOnWriteArrayList змінюється під час ітерації окрема копія 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();
}
}