Встречается на собеседованиях • сегодня

Как реализована Lazy Initialization

Lazy Initialization — это отложенная инициализация объекта до момента первого использования. В Java это можно реализовать несколькими способами:

  1. Проверка на null в геттере (не потокобезопасно):
java
private HeavyObject heavy;

public HeavyObject getHeavy() {
    if (heavy == null) {
        heavy = new HeavyObject();
    }
    return heavy;
}
  1. Синхронизированный метод (потокобезопасно, но медленно):
java
private HeavyObject heavy;

public synchronized HeavyObject getHeavy() {
    if (heavy == null) {
        heavy = new HeavyObject();
    }
    return heavy;
}
  1. Double-Checked Locking (оптимально для многопоточности):
java
private volatile HeavyObject heavy;

public HeavyObject getHeavy() {
    if (heavy == null) {
        synchronized (this) {
            if (heavy == null) {
                heavy = new HeavyObject();
            }
        }
    }
    return heavy;
}
  1. Использование класса Holder (лучший вариант для статических полей):
java
private static class Holder {
    static final HeavyObject INSTANCE = new HeavyObject();
}

public static HeavyObject getHeavy() {
    return Holder.INSTANCE;
}
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы