Ich habe diesen Code, dass eine gemeinsame Hash-Karte in statischem Block initialisiert. Ich stelle die hashmap nicht zur Verfügung und es wird nur gelesen (get und containKey). Ich wollte sicherstellen, dass dies Thread-sicher ist.Java hashmap Nur-Lese-Thread-Sicherheit
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)
}
}
Solange kein Gewinde die Karte Modifizieren (Hinzufügen oder ein Schlüssel/Wert-Paar zu entfernen, oder einen vorhandenen Wert mutiert), während andere Threads lesen, dann ist es threadsicher. Ich habe kein Schlüsselobjekt mutiert, da dies unabhängig vom Threading zu Problemen führt. –
Es ist nicht ausgesetzt zu sein und es nicht innerhalb der Klasse geändert –
ist die Methode Aufruf 'neue MyLoader(). Load()' die _only_ Sache in der ganzen Anwendung, die auf die Karte schreibt, und tut es immer nur, dass schreibt es ein Anruf? –