Scala 没有后台进程线程的未来执行上下文

Scala 没有后台进程线程的未来执行上下文,scala,executorservice,future,Scala,Executorservice,Future,我在使用我编写的各种新应用程序立即退出JVM时遇到了问题,这些应用程序通过Scala 2.10 Futures+Promises框架生成线程 看起来至少在默认执行上下文中,即使我使用了阻塞,例如 future { blocking { /* work */ }} 没有启动任何非守护进程线程,因此JVM认为它可以立即退出 一个愚蠢的解决方法是启动一个虚拟的线程实例,它正在等待,但是我还需要确保这个线程在进程完成时停止 那么我如何强制它们在非守护进程线程上运行呢?在查看附加到ExecutionCo

我在使用我编写的各种新应用程序立即退出JVM时遇到了问题,这些应用程序通过Scala 2.10 Futures+Promises框架生成线程

看起来至少在默认执行上下文中,即使我使用了阻塞,例如

future { blocking { /* work */ }}
没有启动任何非守护进程线程,因此JVM认为它可以立即退出

一个愚蠢的解决方法是启动一个虚拟的
线程
实例,它正在等待,但是我还需要确保这个线程在进程完成时停止


那么我如何强制它们在非守护进程线程上运行呢?

在查看附加到
ExecutionContext.global
的默认
ExecutionContext
时,它属于fork-join类型,它使用的
Threadfactory
将线程设置为
daemon
。如果您想解决这个问题,可以使用不同的
ExecutionContext
,这是您自己设置的。如果您仍然想要FJP的多样性(并且您可能会按照它的最佳伸缩性来做),那么您应该能够通过此查看它们在
ExecutionContextImpl
中所做的事情,并创建类似的内容。或者只需通过Executors.newCachedThreadPool使用缓存线程池,因为它不会在将来完成之前立即关闭

繁殖过程

如果这意味着进程而不仅仅是任务,那么scala.sys.process会生成非守护进程线程来运行操作系统进程


否则,如果您正在创建一组任务,这就是Future.sequence的帮助。然后在主线程上等待ready(Future sequence List(futures))。

您使用的是什么
ExecutionContext
?您是自己创建的还是从
ExecutionContext.global
中获得的?我认为这在
global
和实例化单线程的情况下都会发生,这基本上是我遇到的两种情况。很抱歉措辞错误。不,我在进程中运行计算。因此,从技术上讲,线程。
private[scala]
,grmpff。但无论如何,感谢链接,并确认他们将守护进程设置为true(没有任何配置的可能性,该死的…)