Встречается на собеседованиях • сегодня
Как сделать Singleton ленивым
Ленивый Singleton создаётся только при первом вызове getInstance(), что экономит ресурсы. В Java это реализуется через статический внутренний класс или double-checked locking.
Вариант с внутренним классом (рекомендуется):
java
public class Singleton {
private Singleton() {}
private static class Holder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return Holder.INSTANCE;
}
}Double-checked locking (для старых версий Java):
java
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;
}
}Первый вариант предпочтительнее - он потокобезопасен без synchronized и работает быстрее. Второй вариант нужен, если требуется ленивая инициализация в Java версии ниже 5 (где volatile работал иначе).

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы