Junior — Middle
76
Как работает механизм ленивой инициализации ресурсов и какие его особенности?
Ответ от нейросети
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 для безопасной ленивой инициализации в многопоточном окружении.