Tengo un objeto de lista que se accede por varios subprocesos. Hay principalmente un hilo, y en algunas condiciones dos hilos, que actualiza la lista. Hay de uno a cinco hilos que pueden leerse de esta lista, dependiendo de la cantidad de solicitudes de usuario que se procesen. La lista no es una cola de tareas para realizar, es una lista de objetos de dominio que se están recuperando y actualizando simultáneamente.mejor enfoque para utilizar en Java 6 para una lista que se accede simultáneamente
Ahora bien, hay varias maneras de hacer que el acceso a esta lista de temas de seguridad:
-uso bloque sincronizado
-uso normales bloqueo (es decir, operaciones de lectura y escritura comparten misma cerradura)
-uso ReadWriteLock
-uso una de las nuevas ConcurrentBLABLBA clases de colección
Mi pregunta:
¿Cuál es el enfoque óptimo para utilizar, dado que las secciones pericárdico subsidiario de pericardiocentesis no suelen contener una gran cantidad de operaciones (en su mayoría sólo añadir/eliminar/insertar o conseguir los elementos de la lista)?
¿Puede recomendar otro enfoque, no mencionado anteriormente?
Algunas limitaciones
rendimiento -optimal es crítica, el uso de memoria no tanto
-debe ser una lista ordenada (en la actualidad la sincronización en un ArrayList ), aunque no es una lista ordenada (es decir, no ordenados usando Comparable o Comparator, pero de acuerdo con el orden de inserción)
-la lista será grande, contiene hasta 100000 objetos de dominio, por lo que no es posible usar algo como CopyOnWriteArrayList
-las secciones de escritura/actualización suelen ser muy rápidas, haciendo simples add/eliminar/insertar o reemplazar (establecer)
-la operaciones de lectura harán todo una elementAt (índice) llame a la mayor parte del tiempo, aunque algunas operaciones de lectura podrían hacer una búsqueda binaria o indexOf (elemento)
-no iteración directa sobre la lista se hace, a pesar de operación como indexOf (..) va a recorrer la lista
Me gusta la idea de ConcurrentSkipListMap. En el 90% de las veces, la lista se ordena de acuerdo con una marca de tiempo (parte de la ID de cada objeto de dominio), por lo que probablemente valga la pena optimizarla para eso. Todavía pensarás en el otro 10%. –