Concorrência Java: Volátil vs final em variáveis em cascata?
é
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);
o mesmo 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);
caso o mapa interno seja acessado por diferentes segmentos?
ou é necessário algo assim:
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);
No caso de NÃO ser um mapa em "cascata", final e volátil têm o mesmo efeito de deixar claro que todos os encadeamentos sempre veem o conteúdo correto do mapa ... Mas o que acontece se o próprio mapa contiver um mapa, como no exemplo ... Como faço para confirmar que o mapa interno está corretamente "com barreira de memória"?
Tanques! Tom