我已经阅读了很多,但没有找到确定的答案。
我有一个类似如下的课程:
public class Foo() {
private static final HashMap sharedData;
private final HashMap myRefOfInnerHashMap;
static {
// time-consuming initialization of sharedData
final HashMap innerMap = new HashMap;
innerMap.put...
innerMap.put...
...a
sharedData.put(someKey, java.util.Collections.unmodifiableMap(innerMap));
}
public Foo(String key) {
this.myRefOfInnerHashMap = sharedData.get(key);
}
public void doSomethingUseful() {
// iterate over copy
for (Map.Entry entry : this.myRefOfInnerHashMap.entrySet()) {
...
}
}
}
我想知道是否可以从Foo的实例访问sharedData(如构造函数和doSomethingUseful()中所示)的线程安全。 Foo的许多实例将在多线程环境中创建。
我的意图是sharedData在静态初始化程序中被初始化,之后不被修改(只读)。
<