CopyOnWriteArrayList
As operações add , set , remove em uma determinada coleção resultam na criação de uma nova cópia do array interno. Isso garante que não capturemos ConcurrentModificationException .
Apenas lembre-se de que, ao copiar um array, apenas as referências a objetos são copiadas, incluindo o acesso aos campos de elementos não thread-safe. Essas coleções são mais bem usadas em casos com um número mínimo de operações de gravação.

CopyOnWriteArrayList<E> é um análogo thread-safe de ArrayList , implementado com base nos algoritmos CopyOnWrite. Métodos adicionais e construtores são descritos abaixo:
CopyOnWriteArrayList(E[] toCopyIn) | Um construtor que usa uma matriz como entrada. |
int indexOf(E e, int index) | Retorna o índice do primeiro elemento encontrado, iniciando no índice informado. |
int lastIndexOf(E e, int index) | Retorna o índice do primeiro elemento encontrado em uma pesquisa reversa, começando no índice fornecido. |
booleano addIfAbsent(E e) | Adicione um elemento se ele não estiver na coleção. O método equals é usado para comparar elementos . |
int addAllAbsent(Collection<? extends E> c) | Adicione elementos se eles não estiverem na coleção. Retorna o número de elementos adicionados. |
Interface ConcurrentMap
Implementações aprimoradas de HashMap e TreeMap com suporte para multithreading e escalabilidade.

ConcurrentMap<K, V> é uma interface que estende Map com operações atômicas adicionais.
V putIfAbsent(chave K, valor V) | Adiciona um novo par chave-valor somente se a chave não estiver na coleção. Retorna o valor anterior para a chave fornecida. |
boolean remove(chave do objeto, valor do objeto) | Remove o par chave-valor apenas se a chave fornecida corresponder ao valor fornecido no Mapa. Retorna true se o elemento foi removido com sucesso. |
boolean replace(K key, V oldValue, V newValue) | Substitui o valor antigo pelo novo por chave somente se o valor antigo corresponder ao valor fornecido no Mapa. Retorna true se o valor foi substituído por um novo. |
V substituir (tecla K, valor V) | Substitui um valor antigo por um novo por chave somente se a chave estiver associada a qualquer valor. Retorna o valor anterior para a chave fornecida. |
ConcurrentHashMap<K, V> - aqui os dados são apresentados na forma de segmentos, que são divididos em hashs de chave. Como resultado, se você precisar de acesso, o segmento será bloqueado, não o objeto. Os iteradores não lançam ConcurrentModificationException e representam dados para um período de tempo específico.
Implementações de ConcurrentHashMap
ConcurrentHashMap<K, V> - aqui os dados são apresentados na forma de segmentos, divididos por hashs de chave. Como resultado, o acesso aos dados é bloqueado por segmentos, não por um objeto. Além disso, os iteradores representam dados para uma fatia de tempo específica e não lançam ConcurrentModificationException .
ConcurrentNavigableMap<K,V> - estende a interface NavigableMap e retorna um ConcurrentNavigableMap . Todos os iteradores são seguros de usar e não lançam ConcurrentModificationException .
ConcurrentSkipListMap<K, V> é um análogo do TreeMap para multithreading. Os dados são classificados por chave e o desempenho log(N) médio é garantido paracontainsKey,get,put,removee outras operações semelhantes.
ConcurrentSkipListSet<E> é uma implementação da interface Set baseada em ConcurrentSkipListMap .
GO TO FULL VERSION