@ Середина, я подозревал, что, что-то подобное было причиной.
сь, это не слишком глупый вопрос ...
У меня есть код, подобный следующему в моем проекте:
public class ConfigStore {
public static class Config {
public final String setting1;
public final String setting2;
public final String setting3;
public Config(String setting1, String setting2, String setting3) {
this.setting1 = setting1;
this.setting2 = setting2;
this.setting3 = setting3;
}
}
private volatile HashMap<String, Config> store = new HashMap<String, Config>();
public void swapConfigs(HashMap<String, Config> newConfigs) {
this.store = newConfigs;
}
public Config getConfig(String name) {
return this.store.get(name);
}
}
По мере обработки запросов каждый поток будет запрашивать конфигурацию для использования из хранилища с помощью функции getConfig (). Однако периодически (вероятнее всего, каждые несколько дней) конфиги обновляются и меняются с помощью функции swapConfigs (). Код, который вызывает swapConfigs (), не сохраняет ссылку на карту, которую он передает, поскольку это просто результат анализа файла конфигурации.
В этом случае этоvolatile
ключевое слово все еще нужно в переменной экземпляра магазина?Будет лиvolatile
Ключевое слово представляет какие-либо потенциальные узкие места производительности, о которых я должен знать или которых можно избежать, учитывая, что скорость чтения значительно превышает скорость записи?Большое спасибо,