应用程序在Future完成之前退出

时间:2015-07-31 02:59:16

标签: java multithreading scala playframework

根据我的理解,Future将由线程池中的新线程处理。同时,主线程可以继续进行不依赖于Future的结果的计算。

这来自https://www.playframework.com/documentation/2.4.x/ThreadPools,支持我的理解。

  

请注意,您可能想要将阻止代码包装在其中   期货。这不会使它无阻塞,它只是意味着   阻塞将发生在不同的线程中。你还需要做   确保您使用的线程池有足够的线程   处理阻止。

此外,在JVM中,线程中没有父子项的概念。换句话说,所有线程都被平等对待。这意味着,即使主线程完成,解决Future的线程也将继续运行。

但是,在下面的示例中,为什么当主线程完成时,Future线程也会被杀死。如果我没有在示例结尾处注释 sleep(10000),我可以看到Future结果。

val f3 = Future {
  sleep(5000)
  2
}

f3.onComplete {
  case Success(value) => println(s"f3's result = $value")
  case Failure(e) => e.printStackTrace
}

// do other work
println("A ...")
sleep(100)
println("B ...")
sleep(100)
println("C ...")
sleep(100)
println("D ...")
sleep(100)
println("E ...")
sleep(100)
println("F ...")
sleep(100)

// keep the JVM running
//  sleep(10000)

def sleep(duration: Long) {
  Thread.sleep(duration)
}

0 个答案:

没有答案