Надеюсь, это не слишком глупо вопрос...
В моем проекте есть код, похожий на следующий:
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
вводить какие-либо потенциальные узкие места в производительности, о которых я должен знать или могу избежать, учитывая, что скорость чтения значительно превышает скорость записи?
Большое спасибо,