Sobes.tech
Назад к вопросам
Junior — Middle
74

Объясните концепцию двойной проверки блокировки и как она используется для повышения эффективности многопоточности.

Ответ от нейросети

sobes.tech AI

Двойная проверка блокировки (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;
    }
}

Ключевой момент — использование volatile для переменной instance, чтобы гарантировать корректную видимость изменений между потоками.