Как создать Singleton в Java

«Как создать Singleton в Java» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

public class Singleton {
    private static volatile Singleton instance;

    private Singleton() {
        // Приватный конструктор
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

Ключевые моменты:

  1. volatile гарантирует видимость изменений между потоками
  2. Двойная проверка (double-checked locking) для оптимизации синхронизации
  3. Приватный конструктор предотвращает создание экземпляров через new

Альтернатива - инициализация при загрузке класса:

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return INSTANCE;
    }
}