如何在Worker线程上启动Lazy Init



我有一个我用 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()
}

第一个工作线程将使用类,它将初始化类加载,从而计算值。其他线程将等待它

最新更新