¿Por qué no hay una implementación ArrayList concurrente en el paquete java.util.concurrent?
Creo que la razón principal por la que no se agrega una implementación ArrayList concurrente al paquete java.util.concurrent es que es difícil desarrollar una Lista universal segura para subprocesos sin cuellos de botella de concurrencia.
El verdadero punto/valor de clases como ConcurrentHashMap no es que garanticen la seguridad de los subprocesos. Más bien, garantizan la seguridad de los subprocesos sin cuellos de botella de concurrencia. Por ejemplo, ConcurrentHashMap utiliza tecnología de segmentación de bloqueo e iteradores de mapas débilmente consistentes para evitar cuellos de botella de concurrencia.
Entonces el problema es que con estructuras de datos como "Array List", no se sabe cómo evitar cuellos de botella de concurrencia. Tomando una operación como contiene () como ejemplo, ¿cómo puede evitar bloquear toda la lista cuando realiza una búsqueda?
Por otro lado, Queue y Deque (basados en la Lista Enlazada) tienen implementaciones concurrentes porque sus interfaces tienen más restricciones que la interfaz de List, y estas restricciones hacen posible implementar la concurrencia.
CopyOnWriteArrayList es un ejemplo interesante. Evita el cuello de botella de concurrencia de las operaciones de solo lectura (como get/contains), pero para lograrlo, realiza mucho trabajo y cambia la visibilidad en el archivo. operación de modificación. Además, la operación de modificación también bloquea toda la Lista, por lo que esto también es un cuello de botella de concurrencia. Entonces, en teoría, CopyOnWriteArrayList no es una lista concurrente universal.