Назад к вопросам
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, чтобы гарантировать корректную видимость изменений между потоками.