Tengo un mapa sincronizada (a través de Collections.synchronizedMap()
) que es leído y actualizado por hilo de rosca A. B accede al mapa sólo a través de Map.keySet()
(sólo lectura).Cómo sincronizar el mapa entre un subproceso de r/w y un subproceso de solo lectura?
¿Cómo debo sincronizar esta? El docs say que keySet() (para Collections.synchronizedMap) "No necesita estar en el bloque sincronizado". Puedo poner el acceso de lectura/escritura del Subproceso A dentro de un bloque sincronizado, pero ¿es necesario?
supongo que me parece extraño a utilizar incluso un mapa sincronizada, o un bloque sincronizado, si Map.keySet no necesita ser sincronizado (de acuerdo con el enlace de documentos arriba) ...
Actualización: Olvidé que la iteración de keySet debe estar sincronizada, incluso aunque la recuperación de keySet no requiera sincronización. No es particularmente emocionante tener keySet sin poder verlo, por lo que el resultado final = se requiere sincronización. Usando un ConcurrentHashMap en su lugar.
¿se trata de java3D? –
@ tuğrulbüyükışık nope. Pregunta general de concurrencia de Java. – ericsoco