Встречается на собеседованиях • сегодня
Как сделать ленивый Singleton в Java
Ленивая инициализация Singleton означает создание экземпляра только при первом вызове getInstance(). Вот потокобезопасный вариант с двойной проверкой (double-checked locking):
java
public class LazySingleton {
private static volatile LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}Ключевые моменты:
volatileгарантирует видимость изменения instance для всех потоков- Двойная проверка (
if (instance == null)) минимизирует блокировки - Приватный конструктор предотвращает создание экземпляров извне
Альтернатива - использование статического внутреннего класса (более простой и безопасный вариант):
java
public class LazySingleton {
private LazySingleton() {}
private static class Holder {
static final LazySingleton INSTANCE = new LazySingleton();
}
public static LazySingleton getInstance() {
return Holder.INSTANCE;
}
}
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы