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