没有守护线程期货执行上下文(Execution context without daemon thr

2019-09-04 02:08发布

我有在JVM立即用各种新的应用程序,我写它通过斯卡拉2.10期货+承诺框架生成线程退出麻烦。

看来,至少在默认执行环境,即使我使用的是阻塞,如

future { blocking { /* work */ }}

没有非守护线程启动,因此JVM认为它可以立即退出。

愚蠢的解决办法是推出一个虚拟Thread它只是在等待实例,但后来我也需要确保当工序均由内部完成这个线程停止。

因此,如何加强我他们在非守护线程运行?

Answer 1:

在着眼于默认ExecutionContext附着ExecutionContext.global ,它的叉加入品种和Threadfactory它使用套线程daemon 。 如果要解决这个问题,你可以使用不同ExecutionContext ,一个你建立你自己。 如果您仍然希望FJP品种(你可能做的,因为它扩展了最好的),你应该能够看到他们在做什么ExecutionContextImpl通过这个链接 ,并创建类似的东西。 或者只是使用一个缓存的线程池通过Executors.newCachedThreadPool为您之前完成期货不会立即关闭。



Answer 2:

产卵过程

如果这意味着过程并不仅仅是任务,然后scala.sys.process产卵非守护线程来运行操作系统进程。

否则,如果你创建了一堆的任务,这就是Future.sequence与帮助。 然后,只需等待主线程准备(未来顺序列表(期货))。



文章来源: Execution context without daemon threads for futures