CopyOnWriteArrayList
Las operaciones add , set , remove en una colección dada dan como resultado una nueva copia de la matriz interna que se está creando. Esto asegura que no detectemos ConcurrentModificationException .
Solo recuerde que al copiar una matriz, solo se copian las referencias a los objetos, incluido el acceso a los campos de elementos que no son seguros para subprocesos. Estas colecciones se utilizan mejor en casos con un número mínimo de operaciones de escritura.
![](https://cdn.codegym.cc/images/article/dd30e3f5-509c-479f-acb2-47f72f63b032/512.jpeg)
CopyOnWriteArrayList<E> es un análogo seguro para subprocesos de ArrayList , implementado sobre la base de algoritmos CopyOnWrite. Los métodos adicionales y el constructor se describen a continuación:
CopyOnWriteArrayList(E[] paraCopiarEn) | Un constructor que toma una matriz como entrada. |
índice intOf(E e, índice int) | Devuelve el índice del primer elemento encontrado, comenzando en el índice dado. |
int lastIndexOf(E e, int index) | Devuelve el índice del primer elemento encontrado en una búsqueda inversa, comenzando en el índice dado. |
booleano addIfAbsent(E e) | Agregue un elemento si no está en la colección. El método de igualdad se utiliza para comparar elementos . |
int addAllAbsent(Colección<? extiende E> c) | Agregue elementos si no están en la colección. Devuelve el número de elementos añadidos. |
Interfaz de mapa concurrente
Implementaciones mejoradas de HashMap y TreeMap con soporte para subprocesos múltiples y escalabilidad.
![](https://cdn.codegym.cc/images/article/b93ad73c-488f-4c46-91c8-9a76c7337e1a/1024.jpeg)
ConcurrentMap<K, V> es una interfaz que amplía Map con operaciones atómicas adicionales.
V putIfAbsent (clave K, valor V) | Agrega un nuevo par clave-valor solo si la clave no está en la colección. Devuelve el valor anterior de la clave dada. |
eliminación booleana (clave de objeto, valor de objeto) | Elimina el par clave-valor solo si la clave dada coincide con el valor dado en el Mapa. Devuelve verdadero si el elemento se eliminó con éxito. |
reemplazo booleano (clave K, V valor anterior, V valor nuevo) | Reemplaza el valor anterior con el nuevo por clave solo si el valor anterior coincide con el valor dado en el Mapa. Devuelve verdadero si el valor ha sido reemplazado por uno nuevo. |
V reemplazar (tecla K, valor V) | Reemplaza un valor antiguo por uno nuevo por clave solo si la clave está asociada con algún valor. Devuelve el valor anterior de la clave dada. |
ConcurrentHashMap<K, V> : aquí los datos se presentan en forma de segmentos, que se dividen en hash clave. Como resultado, si necesita acceso, se bloquea el segmento, no el objeto. Los iteradores no lanzan ConcurrentModificationException y representan datos durante un período de tiempo específico.
Implementaciones de ConcurrentHashMap
ConcurrentHashMap<K, V> : aquí los datos se presentan en forma de segmentos, desglosados por hash clave. Como resultado, el acceso a los datos está bloqueado por segmentos, no por un objeto. Además, los iteradores representan datos para un período de tiempo específico y no lanzan ConcurrentModificationException .
ConcurrentNavigableMap<K,V> : amplía la interfaz NavigableMap y devuelve un ConcurrentNavigableMap . Todos los iteradores son seguros de usar y no lanzan ConcurrentModificationException .
ConcurrentSkipListMap<K, V> es un análogo de TreeMap para subprocesos múltiples. Los datos se ordenan por clave y se garantiza el rendimiento promedio de log(N) paracontainsKey,get,put,removey otras operaciones similares.
ConcurrentSkipListSet<E> es una implementación de la interfaz Set basada en ConcurrentSkipListMap .