Да, статические члены сохраняются (это не то же самое, что постоянные - они не "сохраняются", они никогда не исчезают), что включает реализации синглтона.Вы получаете степень ленивой инициализации бесплатно, как если бы она была создана в статическом присваивании или статическом конструкторе, она не будет вызываться до тех пор, пока соответствующий класс не будет впервые использован.Это создание блокируется по умолчанию, но все другие варианты использования, как вы говорите, должны быть поточно-ориентированными.Принимая во внимание степень параллелизма, тогда, если синглтон не будет неизменным (ваша справочная таблица не изменяется в течение времени жизни приложения), вы должны быть очень осторожны с тем, как его обновлять (один из способов - поддельный синглтон).- при обновлении вы создаете новый объект, а затем фиксируете его, присваивая ему замену текущего значения; не строго одноэлементный, хотя он выглядит как «извне»).состояние подозрительно, особенно когда речь идет о протоколе без сохранения состояния, таком как сеть.Тем не менее, он может быть хорошо использован, особенно как кэш-память постоянных или почти постоянных данных в памяти, особенно если он включает в себя граф объектов, который не может быть легко получен из базы данных.
Хотя ловушки значительны, так что будьте осторожны.В частности, риск проблем с блокировкой не может быть преуменьшен.
Правка, чтобы соответствовать правке в вопросе:
Моя большая проблема - как инициализируется массив.Ясно, что этот пример неполон, так как он будет иметь только 0 для каждого элемента.Если он устанавливается при инициализации и доступен только для чтения, тогда все в порядке.Если он изменчив, то будьте очень, очень осторожны с вашими потоками.
Также помните о негативном влиянии слишком большого количества таких поисков на масштабирование.Несмотря на то, что вы сохраняете для большинства запросов предварительный расчет, при обновлении синглтона получается период очень тяжелой работы.Долгосрочный запуск, вероятно, будет терпимым (так как это будет не очень часто), но произвольные замедления, происходящие впоследствии, могут быть сложно проследить до их источника.