Если содержимое карты никогда не меняется, у вас нет проблем.Проблемы с видимостью модели памяти возникают только при изменении содержимого переменной.
Вы, вероятно, захотите синхронизировать инициализацию карты, чтобы убедиться, что никакие потоки не получат к ней доступ до ее полной инициализации, и чтобы убедиться, чточто значения, загруженные в карту, все видны.
РЕДАКТИРОВАТЬ: Первоначально я полностью проигнорировал вопрос о том, как карта инициализируется в первую очередь.После прочтения одной из статей Пью (снова) кажется, что карта действительно должна быть окончательной, чтобы данные инициализации стали видимыми:
Способность видетьправильно составленное значение для поля хорошо, но если само поле является ссылкой, то вы также хотите, чтобы ваш код видел обновленные значения для объекта (или массива), на который оно указывает.Если ваше поле является окончательным, это также гарантировано.Таким образом, вы можете иметь окончательный указатель на массив и не беспокоиться о том, что другие потоки видят правильные значения для ссылки на массив, но неправильные значения для содержимого массива.Опять же, под «правильным» здесь мы подразумеваем «обновленный на конец конструктора объекта», а не «последнее доступное значение».
Существует список условий, которые вызывают отношение «происходит до», приведенный в спецификации Java, я должен привести их здесь (или, если кто-то другой ответит, я проголосую за него).).Статическая переменная и идиома Holder - это, безусловно, один из способов.Вопрос довольно широкий, поскольку в нем не указано, как инициализируется карта. Если вы опубликуете вопрос, описывающий, как вы предлагаете выполнить инициализацию, вы, вероятно, получите более непосредственный полезный ответ.