Básicamente, tendemos a usar ConcuttentHashMap en un entorno de subprocesos múltiples. Mi código actual es así:
ExecutorService executor = Executors.newFixedThreadPool(3); Map<String, Future<String>> myMap = new HashMap<String, Future<String>>(); myMap.put("SomeValue", executor.submit(() -> return callAndReturnStringMethod("SomeValue")); myMap.put("AnotheValue", executor.submit(() -> return callAndReturnStringMethod("AnotheValue")); ... ....Solo quiero almacenar el objeto futuro para las llamadas de subprocesos asíncronos correspondientes a la cadena pasada como clave en el mapa.
Mi primera pregunta: ¿Será bueno usar HashMap y no ConcurrentHashMap al tratar con el objeto Future? ¿Debo usar ConcurrentHashMap en este escenario? Segunda pregunta: ¿Cuáles podrían ser las compensaciones si uso el último?
estas diciendo eso
Los valores del mapa no se modifican.
por lo que no debería haber ninguna razón para elegir ConcurrentHashMap. ConcurrentHashMap está destinado a proporcionar seguridad de subprocesos y atomicidad de operaciones entre subprocesos, que tampoco necesita.
Las compensaciones son que está pagando el precio de las operaciones atómicas/seguras para subprocesos cuando no las necesita. En cuanto a cuánto es realmente, depende de su aplicación.
Temas relacionados
Ninguno.
Use un EnumMap y transforme su SomeValue/AnotherValue en enum s. Será más rápido de construir, más rápido de buscar y más compacto de almacenar. No veo ninguna razón para usar cualquier estructura de datos concurrentes si no planea alterar el ConcurrentHashMap en sí mismo , al mismo tiempo.