ПУБЛИКАЦИЯ
Функция инициализации может вызываться несколько раз при одновременном обращении к неинициализированному значению экземпляра Lazy, но только одно вычисленное значение будет использовано в качестве значения экземпляра Lazy и будет доступно всем потокам.
Примеры
import kotlin.concurrent.thread
fun main() {
//sampleStart
class Answer(val value: Int, val computedBy: Thread = Thread.currentThread()) {
override fun toString() = "Answer: $value, computed by: $computedBy"
}
val answer: Answer by lazy(LazyThreadSafetyMode.PUBLICATION) {
println("Computing the answer to the Ultimate Question of Life, the Universe, and Everything")
Answer(42)
}
val t1 = thread(name = "#1") {
println("Thread 1: $answer")
}
val t2 = thread(name = "#2") {
println("Thread 2: $answer")
}
// It is **not** guaranteed that 'Computing' message will be printed once,
// but guaranteed that both threads will see 42 computed by *the same* thread as an answer
t1.join()
t2.join()
//sampleEnd
}
Свойства
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-lazy-thread-safety-mode/-p-u-b-l-i-c-a-t-i-o-n/index.html