Ответ 1
Код, который вы показываете, не является технически потокобезопасным. Этот вид хитроумного кода часто получает зависания.
Код должен выглядеть так:
public class Singleton {
private static class SingletonHolder {
public static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
Здесь мы назначаем в статическом инициализаторе (SingletonHolder
), который будет просматриваться любым потоком, обращаясь к нему с помощью правильного отношения "дожидаться". Там нет ничего особенного в вложенном классе, он просто позволяет использовать внешний класс без непосредственной сборки объекта singleton. Почти наверняка это совершенно бессмысленно, но, похоже, кому-то нравятся.
Как всегда [изменчивые] синглтоны - действительно плохая идея.