Ваш код в порядке. Вам нужно volatile
, иначе ваш код будет на 100% поточно-ориентированным (обновление ссылки является атомарным), однако изменение может быть не видимым для всех потоков. Это означает, что некоторые потоки будут по-прежнему видеть старое значение store
.
То, что сказано volatile
обязательно в вашем примере. Вы могли бы рассмотреть AtomicReference
, но это не даст вам больше ничего в вашем случае.
Вы не можете обменять правильность на производительность, поэтому ваш второй вопрос не является действительно действительным. Это окажет некоторое влияние на производительность, но, вероятно, только во время обновления, которое, как вы сказали, происходит очень редко. По сути, JVM обеспечит видимость изменения для всех потоков, «очистив» его, но после этого оно будет доступно как любая другая локальная переменная (вплоть до следующего обновления).
Кстати, мне нравится, что Config
класс является неизменяемым, пожалуйста, на всякий случай учтите также неизменную Map
реализацию.