thread safe jre jdk descargar concurrent collection java list concurrency

safe - ¿Hay una lista concurrente en el JDK de Java?



oracle java (4)

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


Debido a que el hecho de adquirir la posición y obtener el elemento de la posición dada, naturalmente requiere un 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í misma es atómica y se puede realizar sin bloqueo / sincronización explícitos.

Por lo tanto, obtener el elemento en la posición n de una List dada como una operación atómica no tiene mucho sentido en una situación donde se anticipa el acceso concurrente.



Puede utilizar muy bien Collections.synchronizedList(List) si todo lo que necesita es una simple sincronización de invocación:

List<Object> objList = Collections.synchronizedList(new ArrayList<Object>());


Si no le importa tener acceso basado en índices y solo desea las características de conservación de orden de inserción de una Lista, podría considerar un java.util.concurrent.ConcurrentLinkedQueue . Ya que implementa Iterable, una vez que haya terminado de agregar todos los elementos, puede recorrer los contenidos usando la sintaxis simplificada para cada uno:

Queue<String> globalQueue = new ConcurrentLinkedQueue<String>(); //Multiple threads can safely call globalQueue.add()... for (String href : globalQueue) { //do something with href }