Я не знаю, сломался ли он, но на самом деле это не самое эффективное решение из-за синхронизации, которая довольно дорогая.Лучшим подходом было бы использование идиомы «Инициализация по требованию», которая загружает ваш синглтон в память при первом запросе, как следует из названия, и, следовательно, ленивая загрузка.Самое большое преимущество, которое вы получаете с этой идиомой, заключается в том, что вам не нужно синхронизировать, потому что JLS обеспечивает последовательную загрузку классов.
Подробная запись в википедии по теме: http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom
ДругойСледует иметь в виду, что, поскольку появились структуры внедрения зависимостей, такие как Spring и Guice, экземпляры классов создаются и управляются этими контейнерами, и они при желании предоставят вам Singleton, поэтому не стоит ломать голову над этим.это, если вы не хотите научиться мыслить за шаблоном, что полезно.Также обратите внимание, что синглтоны, предоставляемые этими контейнерами IOC, являются синглетами на экземпляр контейнера, но обычно у вас будет один контейнер IOC на приложение, поэтому это не станет проблемой.