Java Concurrency: Volatile vs final in "kaskadierten" Variablen?

ist

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);

das Gleiche wi

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);

wenn auf die innere Map von verschiedenen Threads zugegriffen wird?

oder ist sogar so etwas erforderlich:

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);

Wenn es sich NICHT um eine "kaskadierte" Karte handelt, haben final und volatile am Ende den gleichen Effekt, dass sichergestellt wird, dass alle Threads immer den korrekten Inhalt der Karte sehen ... Aber was passiert, wenn die Karte selbst eine Karte enthält , wie im Beispiel ... Wie stelle ich sicher, dass die innere Map korrekt "speichergesperrt" ist?

Tanks! Tom

Antworten auf die Frage(6)

Ihre Antwort auf die Frage