Concurrencia de Java: ¿Volátil vs final en variables "en cascada"?

es

final Map<Integer,Map<String,Integer>> status = new ConcurrentHashMap<Integer, Map<String,Integer>>();
Map<Integer,Map<String,Integer>> statusInner = new ConcurrentHashMap<Integer, Map<String,Integer>>();
status.put(key,statusInner);

lo mismo que

volatile Map<Integer,Map<String,Integer>> status = new ConcurrentHashMap<Integer,   Map<String,Integer>>();
Map<Integer,Map<String,Integer>> statusInner = new ConcurrentHashMap<Integer, Map<String,Integer>>();
status.put(key,statusInner);

en caso de que el mapa interno sea accedido por diferentes hilos?

o incluso se requiere algo como esto:

volatile Map<Integer,Map<String,Integer>> status = new ConcurrentHashMap<Integer, Map<String,Integer>>();
volatile Map<Integer,Map<String,Integer>> statusInner = new ConcurrentHashMap<Integer, Map<String,Integer>>();
status.put(key,statusInner);

En caso de que NO sea un mapa "en cascada", el final y el volátil tienen al final el mismo efecto de hacer que todos los hilos vean siempre el contenido correcto del Mapa ... Pero, ¿qué sucede si el Mapa mismo contiene un mapa? como en el ejemplo ... ¿Cómo hago para asegurar que el Mapa interno está correctamente "Barrera de memoria"?

Tanques! Tom

Respuestas a la pregunta(3)

Su respuesta a la pregunta