1
私はこのコードにスタティックブロックで初期化された共有ハッシュマップを持っています。私はハッシュマップを公開しておらず、読み取り専用です(getおよびcontainsKey)。 これがスレッドセーフであるかどうかを確認したかったのです。Javaハッシュマップ読み取り専用スレッドセーフ
new MyLoader().load()
リターンは完全にすべてのデータを初期化されたマップは、その後変更されることはありませんすべてのスレッドが同時にこのマップからデータを取得するために、それが安全であると仮定すると
public class MyClass {
private static final Map<String, MyObject> myMap;
static {
myMap = new MyLoader().load()
}
public MyClass() {
if (containsKey(someKey)) {
// do something
}
myMap.get(something)
}
static boolean containsKey(String key) {
// do some other stuff
return myMap.containsKey(key)
}
}
他のスレッドが読み取り中にスレッドがマップを変更していない限り(キー/値のペアの追加または削除、または既存の値の変更)、スレッドセーフです。私は、スレッド化に関係なく問題を引き起こすため、キーオブジェクトを変更することは含まれませんでした。 –
これは公開されておらず、クラス内で変更されていません –
メソッドは、マップに書き込むアプリケーション全体で_only_ものを 'new MyLoader()。load()'メソッドで呼び出すのですか? 1つのコール? –