Ответ
Потокобезопасный синглтон гарантирует, что только один экземпляр класса будет создан в многопоточной среде.
Способы реализации в Kotlin:
object(ленивая инициализация, потокобезопасно по умолчанию):
object Singleton
- 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 тоже потокобезопасна по умолчанию.