У меня есть этот код, который имеет общую хэш-карту, инициализированную в статическом блоке. Я не раскрываю hashmap, и он используется только для чтения (get и containsKey). Я хотел убедиться, что это потокобезопасно.Java hashmap readonly thread security
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)
}
}
Пока нить не модифицирует карту (добавление или удаление пары ключ/значение или изменение существующего значения), в то время как другие потоки читают, тогда она является потокобезопасной. Я не включил мутирующий ключевой объект, потому что это вызывает проблемы, независимо от потоковой передачи. –
Он не подвергается воздействию и не изменен в классе –
Является ли метод вызовом 'new MyLoader(). Load()' _only_ вещь во всем приложении, которое записывает на карту, и делает это только когда-либо записывая его в этом один звонок? –