Ответ
by lazy в Kotlin может работать в трёх режимах:
- LazyThreadSafetyMode.SYNCHRONIZED (по умолчанию)
Гарантирует потокобезопасность, но с небольшими накладными расходами на синхронизацию:
val lazyValue: String by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
"Initialized"
}
- LazyThreadSafetyMode.PUBLICATION
Разрешает множественную инициализацию, но возвращает первый успешный результат:
val lazyValue by lazy(LazyThreadSafetyMode.PUBLICATION) {
Thread.sleep(100)
"Initialized"
}
- LazyThreadSafetyMode.NONE
Не потокобезопасен, но самый быстрый. Используется только в однопоточных сценариях:
val lazyValue by lazy(LazyThreadSafetyMode.NONE) {
"Initialized"
}