Junior — Middle
Leg het concept van dubbele verificatie van vergrendeling uit en hoe het wordt gebruikt om de efficiëntie van multithreading te verbeteren.
sobes.tech AI
Antwoord van 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, чтобы гарантировать корректную видимость изменений между потоками.