Назад к вопросам
Junior — Middle
63
В чем заключается назначение механизма двойной проверки в многопоточном программировании?
Ответ от нейросети
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, чтобы избежать проблем с видимостью и переупорядочиванием инструкций.