Каким образом реализовать шаблон Singleton с отложенной инициализацией в Java?

В Java шаблон Singleton с отложенной инициализацией можно реализовать несколькими способами. Один из распространённых — использование ленивой инициализации с синхронизацией, чтобы обеспечить потокобезопасность:

Короткий ответ

Что ответить на собеседовании

В Java шаблон Singleton с отложенной инициализацией можно реализовать несколькими способами. Один из распространённых — использование ленивой инициализации с синхронизацией, чтобы обеспечить потокобезопасность:

Подробный разбор

Ответ с пояснениями

В Java шаблон Singleton с отложенной инициализацией можно реализовать несколькими способами. Один из распространённых — использование ленивой инициализации с синхронизацией, чтобы обеспечить потокобезопасность:

public class Singleton {
    private static Singleton instance;

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

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

Однако синхронизация метода может снижать производительность. Более эффективный способ — использование "двойной проверки блокировки":

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;
    }
}

Также можно использовать статический вложенный класс, который гарантирует ленивую инициализацию и потокобезопасность без синхронизации:

public class Singleton {
    private Singleton() {}

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

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее