scala - 没有用于 future 的守护线程的执行上下文

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

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

future { blocking { /* work */ }}

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

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

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

最佳答案

在查看附加到 ExecutionContext.global 的默认 ExecutionContext 时,它属于 fork join 变体,它使用的 Threadfactory 设置线程到 daemon。如果你想解决这个问题,你可以使用一个不同的 ExecutionContext,一个你自己设置的。如果您仍然想要 FJP 变体(并且您可能会这样做,因为它的扩展性最好),您应该能够通过此 link 查看它们在 ExecutionContextImpl 中所做的事情。并创建类似的东西。或者只是通过 Executors.newCachedThreadPool 使用缓存线程池,因为它不会在您的 futures 完成之前立即关闭。

https://stackoverflow.com/questions/16612517/

相关文章:

r - 如何将列表的每个元素作为未命名参数传递给函数?

.net - 无法在 PowerShell 中创建 .Net 对象

amazon-web-services - 带有亚马逊网络服务的 UDP 服务

symfony - 在表单字段类型 'entity' 添加自定义选项

scala - 特征中的字段未及时初始化

autoconf - Automake 要求 "Autoconf 2.65 or better"但我

xcode - 如何在 Xcode 和其他文件中同时复制 .h 和 .m 文件?

.net - 可区分联合中的函数约束泛型参数的类型

python - recarray 中的 numpy datetime64

r - 有不同格式的 knitr 输出图