CopyOnWriteArrayList é uma variante segura de thread de ArrayList na qual todas as operações mutativas (adicionar, definir e assim por diante) são implementadas fazendo uma nova cópia da matriz subjacente.
O CopyOnWriteArrayList é uma alternativa simultânea da interface List implementada e a parte sincronizada do pacote java.util.concurrent e é uma coleção segura para threads.
public class CopyOnWriteArrayList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
CopyOnWriteArrayList é à prova de falhas e não lança ConcurrentModificationException quando CopyOnWriteArrayList subjacente é modificado durante a Iteração, use uma cópia separada de ArrayList.
Isso geralmente é muito caro, porque a matriz de cópias envolve todas as operações de atualização em que uma cópia clonada será criada. CopyOnWriteArrayList é a melhor opção apenas para operação de leitura frequente.
/**
* 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();
}
}