Sobes.tech
Back to questions
Junior — Middle
76

Как реализуется отложенная инициализация объектов или компонентов в программных системах?

Companies where asked
ВТБВТБ

Answer from AI

sobes.tech AI

Отложенная инициализация (lazy initialization) — это техника, при которой объект или компонент создаётся не сразу при загрузке программы, а только в момент первого обращения к нему. Это позволяет экономить ресурсы и ускорять старт приложения.

В Java отложенную инициализацию можно реализовать несколькими способами:

  1. Использование ленивой загрузки с проверкой null:
public class MyClass {
    private ExpensiveObject obj;

    public ExpensiveObject getObj() {
        if (obj == null) {
            obj = new ExpensiveObject();
        }
        return obj;
    }
}
  1. Использование ключевого слова volatile и двойной проверки (Double-checked locking) для потокобезопасности:
public class MyClass {
    private volatile ExpensiveObject obj;

    public ExpensiveObject getObj() {
        if (obj == null) {
            synchronized(this) {
                if (obj == null) {
                    obj = new ExpensiveObject();
                }
            }
        }
        return obj;
    }
}
  1. Использование класса Lazy<T> из сторонних библиотек или собственных реализаций.

  2. Инициализация через внутренний статический класс (Initialization-on-demand holder idiom):

public class MyClass {
    private static class Holder {
        static final ExpensiveObject INSTANCE = new ExpensiveObject();
    }

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

Этот способ гарантирует потокобезопасность и отложенную инициализацию без синхронизации.

Отложенная инициализация полезна, когда создание объекта дорогостоящее, и он может не понадобиться в ходе работы программы.