¿Existe una lista concurrente en el JDK de Java?

Resuelto AlikElzin-kilaka asked hace 13 años • 7 respuestas

¿Cómo puedo crear una instancia de Lista concurrente, donde pueda acceder a elementos por índice? ¿Tiene el JDK alguna clase o método de fábrica que pueda usar?

AlikElzin-kilaka avatar Aug 03 '11 00:08 AlikElzin-kilaka
Aceptado

ConcurrentLinkedQueue

Si no le importa tener acceso basado en índices y solo desea las características de preservación del orden de inserción de una Lista, podría considerar un archivo java.util.concurrent.ConcurrentLinkedQueue. Dado que implementa Iterable, una vez que haya terminado de agregar todos los elementos, puede recorrer los contenidos utilizando la sintaxis for mejorada:

Queue<String> globalQueue = new ConcurrentLinkedQueue<String>();

//Multiple threads can safely call globalQueue.add()...

for (String href : globalQueue) {
    //do something with href
}
Matt Passell avatar Sep 02 '2014 18:09 Matt Passell

Hay una implementación de lista concurrente en java.util.concurrent : CopyOnWriteArrayList .

Copia la lista de "todas las operaciones mutativas ( add, setetc.)" , por lo que funciona mejor para aplicaciones con mucha lectura.

 avatar Aug 02 '2011 17:08

Descargo de responsabilidad : esta respuesta se publicó en 2011, antes de JDK 5 y antes de API concurrentes óptimas y avanzadas. Entonces, si bien lo siguiente funcionará , no es la mejor opción.


Puedes usar Collections.synchronizedList(List) si todo lo que necesitas es una simple sincronización de invocación:

 List<Object> objList = Collections.synchronizedList(new ArrayList<Object>());
Yanick Rochon avatar Aug 02 '2011 18:08 Yanick Rochon

Porque el acto de adquirir la posición y obtener el elemento de la posición dada naturalmente requiere cierto bloqueo (no se puede hacer que la lista tenga cambios estructurales entre esas dos operaciones).

La idea misma de una colección concurrente es que cada operación por sí sola es atómica y se puede realizar sin bloqueo/sincronización explícito.

Por lo tanto, colocar el elemento en posición na partir de una operación atómica dada Listno tiene mucho sentido en una situación en la que se prevé acceso concurrente.

Joachim Sauer avatar Aug 02 '2011 17:08 Joachim Sauer