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

Что такое Double-Checked Locking

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

java
public class Singleton {
    private static volatile Singleton instance;
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        if (instance == null) { // Первая проверка без блокировки
            synchronized (Singleton.class) {
                if (instance == null) { // Вторая проверка под блокировкой
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

Ключевые моменты:

  1. volatile обязательно для корректной работы (без него возможна публикация частично инициализированного объекта)
  2. Первая проверка позволяет избежать блокировки, если объект уже создан
  3. Вторая проверка гарантирует, что только один поток создаст экземпляр

Без volatile возможна ситуация, когда один поток увидит не до конца инициализированный объект.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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