Java 并发:最终字段(在构造函数中初始化)线程安全吗?
2022-09-02 09:30:08
谁能告诉我这个类是否是线程安全的?
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);
}
}
编辑:我的错是没有澄清这个问题。根据JMM常见问题解答:
应提供初始化安全性的新保证。如果一个对象被正确构造(这意味着在构造过程中对它的引用不会转义),那么所有看到对该对象的引用的线程也将看到在构造函数中设置的其最终字段的值,而无需同步。
这让我感到困惑,aMap的集合是。所以其他线程可以看到这些aMap = new HashMap<String, String>();
aMap.put("1", "a");
aMap.put("2", "b");
aMap.put("3", "c");
还是没有?
编辑:我发现这个问题完全接近我的问题