我有一个val mThing
初始化的字段by lazyThing()
。现在,我期望lazyThing()
调用会花一点时间,因此我想在工作线程上开始初始化。显然,如果有其他线程出现并需要mThing
并等待它,那很好,但是我想尽快在工作线程上开始初始化。在Kotlin中这样做有什么好看的方式?
如果有比延迟初始化更好的模式,我可以提出建议。
答案 0 :(得分:1)
您可以在lazy
函数中指定同步模式:
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-lazy-thread-safety-mode/index.html
最简单的云计算方法是让JVM在类加载时进行初始化。因此,您可以声明一个具有计算结果字段的类或对象。接下来,JVM将执行必要的锁定:
object ComputeValueOnClassLoad {
val value = lazyThing()
}
第一个工作线程将使用该类,它将初始化该类的加载并由此计算该值。其他线程会等待