Встречается на собеседованиях • сегодня
Как реализована Lazy Initialization
Lazy Initialization — это отложенная инициализация объекта до момента первого использования. В Java это можно реализовать несколькими способами:
- Проверка на null в геттере (не потокобезопасно):
java
private HeavyObject heavy;
public HeavyObject getHeavy() {
if (heavy == null) {
heavy = new HeavyObject();
}
return heavy;
}- Синхронизированный метод (потокобезопасно, но медленно):
java
private HeavyObject heavy;
public synchronized HeavyObject getHeavy() {
if (heavy == null) {
heavy = new HeavyObject();
}
return heavy;
}- Double-Checked Locking (оптимально для многопоточности):
java
private volatile HeavyObject heavy;
public HeavyObject getHeavy() {
if (heavy == null) {
synchronized (this) {
if (heavy == null) {
heavy = new HeavyObject();
}
}
}
return heavy;
}- Использование класса Holder (лучший вариант для статических полей):
java
private static class Holder {
static final HeavyObject INSTANCE = new HeavyObject();
}
public static HeavyObject getHeavy() {
return Holder.INSTANCE;
}
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы