Встречается на собеседованиях • сегодня
Для чего нужен Double Check
Double Check (Double-Checked Locking) — это паттерн оптимизации в многопоточной среде, который уменьшает накладные расходы на синхронизацию. Основная цель — избежать блокировки после инициализации объекта, проверяя состояние дважды:
- Без блокировки (первая проверка) — если объект уже создан, возвращаем его.
- С блокировкой (вторая проверка) — если объект не создан, синхронизируемся и проверяем снова (чтобы избежать гонки).
java
public class Singleton {
private static volatile Singleton instance;
public static Singleton getInstance() {
if (instance == null) { // Первая проверка (без блокировки)
synchronized (Singleton.class) { // Блокировка
if (instance == null) { // Вторая проверка (под блокировкой)
instance = new Singleton();
}
}
}
return instance;
}
}Ключевые моменты:
- Поле
instanceдолжно бытьvolatile, чтобы избежать проблем с видимостью изменений между потоками. - Без
volatileвозможен частично инициализированный объект из-за переупорядочивания инструкций (out-of-order writes). - Эффективен только при редких обращениях к критической секции.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы