Встречается на собеседованиях • сегодня

Для чего нужен Double Check

Double Check (Double-Checked Locking) — это паттерн оптимизации в многопоточной среде, который уменьшает накладные расходы на синхронизацию. Основная цель — избежать блокировки после инициализации объекта, проверяя состояние дважды:

  1. Без блокировки (первая проверка) — если объект уже создан, возвращаем его.
  2. С блокировкой (вторая проверка) — если объект не создан, синхронизируемся и проверяем снова (чтобы избежать гонки).
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).
  • Эффективен только при редких обращениях к критической секции.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы