равно
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);
так же, как
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);
в случае, если внутренняя Карта доступна из разных потоков?
или даже что-то вроде этого требуется:
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);
В случае, если это НЕ «каскадная» карта, final и volatile имеют в итоге один и тот же эффект, гарантируя, что все потоки всегда будут видеть правильное содержимое карты ... Но что произойдет, если сама карта содержит карта, как в примере ... Как мне убедиться, что внутренняя карта правильно "Память заперта"?
Танки!
Том