如何在工作线程上启动惰性初始化

时间:2019-03-09 23:22:32

标签: kotlin

我有一个val mThing初始化的字段by lazyThing()。现在,我期望lazyThing()调用会花一点时间,因此我想在工作线程上开始初始化。显然,如果有其他线程出现并需要mThing并等待它,那很好,但是我想尽快在工作线程上开始初始化。在Kotlin中这样做有什么好看的方式?

如果有比延迟初始化更好的模式,我可以提出建议。

1 个答案:

答案 0 :(得分:1)

您可以在lazy函数中指定同步模式: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-lazy-thread-safety-mode/index.html

最简单的云计算方法是让JVM在类加载时进行初始化。因此,您可以声明一个具有计算结果字段的类或对象。接下来,JVM将执行必要的锁定:

object ComputeValueOnClassLoad {
  val value = lazyThing()
}

第一个工作线程将使用该类,它将初始化该类的加载并由此计算该值。其他线程会等待