Concorrência Java: o campo final (inicializado no construtor) é seguro para thread
Alguém pode me dizer se essa classe é segura ou nã
class Foo {
private final Map<String,String> aMap;
public Foo() {
aMap = new HashMap<String, String>();
aMap.put("1", "a");
aMap.put("2", "b");
aMap.put("3", "c");
}
public String get(String key) {
return aMap.get(key);
}
}
Edit: É minha culpa não esclarecer a questão. De acordo comJMM FAQ :
Uma nova garantia de segurança de inicialização deve ser fornecida. Se um objeto for construído adequadamente (o que significa que as referências a ele não escapam durante a construção), todos os threads que vêem uma referência a esse objeto também verão os valores para seus campos finais que foram definidos no construtor, sem a necessidade de sincronização
Isso me fez confundir que o conjunto para aMap éaMap = new HashMap<String, String>();
. Para que outros tópicos possam ver esses
aMap.put("1", "a");
aMap.put("2", "b");
aMap.put("3", "c");
ou não
Edit: eu encontrei estequestã exatamente fechado à minha pergunta