Встречается на собеседованиях • сегодня
Как решить проблему с ленивой инициализацией
Ленивая инициализация — это отложенное создание объекта до момента его первого использования. В Java её можно реализовать несколькими способами:
- Проверка в методе (не потокобезопасно):
java
private HeavyObject heavy;
public HeavyObject getHeavy() {
if (heavy == null) {
heavy = new HeavyObject();
}
return heavy;
}- Синхронизированный метод (потокобезопасно, но медленно):
java
private HeavyObject heavy;
public synchronized HeavyObject getHeavy() {
if (heavy == null) {
heavy = new HeavyObject();
}
return heavy;
}- Double-Checked Locking (оптимально для многопоточности):
java
private volatile HeavyObject heavy;
public HeavyObject getHeavy() {
if (heavy == null) {
synchronized (this) {
if (heavy == null) {
heavy = new HeavyObject();
}
}
}
return heavy;
}- Использование Holder-класса (лучший способ):
java
private static class Holder {
static final HeavyObject INSTANCE = new HeavyObject();
}
public static HeavyObject getHeavy() {
return Holder.INSTANCE;
}Для ленивой инициализации в современных приложениях лучше использовать Supplier из Java 8 или фреймворки типа Spring (@Lazy).

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