Sobes.tech
Junior — Middle
75

Как работает механизм ленивой инициализации ресурсов и какие его особенности?

Answer from AI

sobes.tech AI

Ленивая инициализация — это приём, при котором объект или ресурс создаётся только в момент первого обращения к нему, а не при загрузке или создании класса.

Преимущества:

  • Экономия ресурсов, если объект может не понадобиться.
  • Ускорение старта программы.

Особенности в Java:

  • Нужно обеспечить потокобезопасность, если объект используется в многопоточном окружении.
  • Можно использовать разные подходы:
    • Проверка и создание объекта при первом вызове (lazy initialization).
    • Использование synchronized для потокобезопасности.
    • Использование класса-обёртки или внутреннего статического класса (Initialization-on-demand holder idiom).

Пример ленивой инициализации с потокобезопасностью:

public class ResourceHolder {
    private volatile Resource resource;

    public Resource getResource() {
        if (resource == null) {
            synchronized(this) {
                if (resource == null) {
                    resource = new Resource();
                }
            }
        }
        return resource;
    }
}

Здесь используется двойная проверка с volatile для безопасной ленивой инициализации в многопоточном окружении.