Что такое потокобезопасный синглтон

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

Ответ

Потокобезопасный синглтон гарантирует, что только один экземпляр класса будет создан в многопоточной среде.

Способы реализации в Kotlin:

  1. object (ленивая инициализация, потокобезопасно по умолчанию):
object Singleton
  1. Double-Checked Locking (оптимизирован для Java/Kotlin):
class Singleton private constructor() {
    companion object {
        @Volatile private var instance: Singleton? = null
        fun getInstance(): Singleton = instance ?: synchronized(this) {
            instance ?: Singleton().also { instance = it }
        }
    }
}

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

  • @Volatile предотвращает кэширование переменной в потоках.
  • synchronized блокирует создание экземпляра в многопоточной среде.
  • Ленивая инициализация (by lazy) в Kotlin тоже потокобезопасна по умолчанию.