lazylazy делегат используется для отложенной инициализации свойства val до момента его первого обращения. Это полезно для дорогостоящих операций, которые могут быть не всегда нужны.
val (неизменяемое)val heavyObject: HeavyObject by lazy {
println("Initializing") // выполняется только один раз
HeavyObject()
}
По умолчанию lazy использует LazyThreadSafetyMode.SYNCHRONIZED, что означает, что только один поток может инициализировать значение, делая его безопасным для конкурентного доступа.
Ты можешь настроить это поведение, передав режим явно:
LazyThreadSafetyMode.SYNCHRONIZED // по умолчанию; потокобезопасно, использует блокировку
LazyThreadSafetyMode.PUBLICATION // несколько потоков могут запустить инициализатор, побеждает первый результат
LazyThreadSafetyMode.NONE // без потокобезопасности; используй только в однопоточном контексте
lazy идеален для дорогостоящих или ресурсоёмких инициализаций, которые следует отложитьSYNCHRONIZED по умолчанию, если нет конкретной причины оптимизировать производительность в контролируемой многопоточной средеДелегат lazy требует, чтобы свойство было объявлено как var, чтобы кэшированное значение можно было обновить при последующих обращениях.
Новый — ещё не проверен сообществом
Вы