Это более информативно, чем все остальное.
То, что вы опубликовали, - это алгоритм двойной проверки блокировки - и то, что вы отправили , будет работать, насколько мне известно. (Что касается Java 1.5, он тоже работает там.) Однако он очень хрупкий - если вы ошибетесь, вы можете ввести очень тонкие условия гонки.
Я обычно предпочитаю инициализировать синглтон в статическом инициализаторе:
public class Singleton
{
private static readonly Singleton instance = new Singleton();
public static Singleton Instance
{
get { return instance; }
}
private Singleton()
{
// Do stuff
}
}
(Добавьте статический конструктор, если вам нужна дополнительная лень.)
Эту модель легче понять, и в большинстве случаев она так же хороша.
На моей странице реализации синглтона C # (также ссылки Майкла) есть более подробная информация.
Что касается опасностей - я бы сказал, самая большая проблема в том, что вы теряете тестируемость. Вероятно, не слишком плохо для регистрации.