Что такое DoubleCheck проверка

«Что такое DoubleCheck проверка» — вопрос из категории Паттерны, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DoubleCheck проверка — это паттерн в многопоточной среде, который минимизирует накладные расходы синхронизации при ленивой инициализации объекта. Сначала проверяется условие без блокировки, затем, если условие выполняется, заходит в синхронизированный блок и проверяет условие еще раз.

Пример на Kotlin:

val lazyValue: LazyType by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
    // инициализация
}

Или ручная реализация:

@Volatile private var instance: MyClass? = null

fun getInstance(): MyClass {
    if (instance == null) {
        synchronized(this) {
            if (instance == null) {
                instance = MyClass()
            }
        }
    }
    return instance!!
}

Ключевые моменты:

  • @Volatile гарантирует видимость изменений между потоками
  • Вторая проверка внутри synchronized блока критически важна
  • В Kotlin лучше использовать by lazy с SYNCHRONIZED режимом