Back to questions
ВТБ
Junior — Middle
76
Как реализуется отложенная инициализация объектов или компонентов в программных системах?
Companies where asked
Answer from AI
sobes.tech AI
Отложенная инициализация (lazy initialization) — это техника, при которой объект или компонент создаётся не сразу при загрузке программы, а только в момент первого обращения к нему. Это позволяет экономить ресурсы и ускорять старт приложения.
В Java отложенную инициализацию можно реализовать несколькими способами:
- Использование ленивой загрузки с проверкой null:
public class MyClass {
private ExpensiveObject obj;
public ExpensiveObject getObj() {
if (obj == null) {
obj = new ExpensiveObject();
}
return obj;
}
}
- Использование ключевого слова
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;
}
}
-
Использование класса
Lazy<T>из сторонних библиотек или собственных реализаций. -
Инициализация через внутренний статический класс (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;
}
}
Этот способ гарантирует потокобезопасность и отложенную инициализацию без синхронизации.
Отложенная инициализация полезна, когда создание объекта дорогостоящее, и он может не понадобиться в ходе работы программы.