Sobes.tech
Back to questions
Middle — Middle+
54

Объясните принцип работы метода двойной проверки в контексте многопоточности.

Answer from AI

sobes.tech AI

Метод двойной проверки (Double-Checked Locking) используется для ленивой инициализации ресурсов в многопоточном окружении с целью минимизировать накладные расходы на синхронизацию.

Идея в том, чтобы сначала проверить, инициализирован ли ресурс, без захвата блокировки (быстрая проверка). Если ресурс ещё не инициализирован, тогда захватывается блокировка, и проверка повторяется (вторая проверка), чтобы избежать повторной инициализации, если другой поток уже успел её выполнить.

Пример на Java:

private volatile Resource resource;

public Resource getResource() {
    if (resource == null) { // Первая проверка без блокировки
        synchronized(this) {
            if (resource == null) { // Вторая проверка с блокировкой
                resource = new Resource();
            }
        }
    }
    return resource;
}

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

Таким образом, блокировка используется только при первой инициализации, а последующие вызовы обходятся без неё, что повышает производительность.