は
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 は最終的に、すべてのスレッドが常に Map の正しい内容を確認できるようにするという同じ効果があります...しかし、Map 自体にマップが含まれている場合はどうなりますか?例のように...内部マップが正しく「メモリバリア」であることを確認するにはどうすればよいですか?
タンク!トム