Я удалил свой предыдущий ответ, так как я не заметил код, который проверяет непубличные конструкторы. Однако, это проверка, которая выполняется только во время выполнения - нет проверки время компиляции , которая является ударом по ней. Он также зависит от наличия достаточного доступа для вызова непубличного конструктора, что добавляет некоторые ограничения.
Кроме того, он не запрещает внутренние конструкторы - так что вы можете получить не синглетоны.
Я бы лично создал экземпляр в статическом конструкторе для обеспечения безопасности простых потоков.
По сути, я не большой поклонник - довольно просто создавать синглтон-классы, и в любом случае вам не следует делать это так часто. Синглтоны - это боль для испытаний, развязки и т. Д.