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

标签 scala executorservice 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 完成之前立即关闭。

关于scala - 没有用于 future 的守护线程的执行上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16612517/

相关文章:

scala - 在 Scala 中,我可以仅将某些文字隐式转换为我的自定义类型吗?

scala - 了解 Scala -> 语法

scala - 特征和序列化/反序列化

java - newFixedThreadPool没有返回值则报错

Java 取消 Future - 如何等待完成?

ios/xcode/objective-c : Display future dates in friendly format

使用 TypeTag 对泛型类型进行 Scala 模式匹配会生成警告,而 ClassTag 不会?

Java ExecutorService - 扩展

java - 如何确保一行代码对于每个单独的线程仅运行一次?

grails - 如果超时,是否有任何方法可以获取 PromiseList 的结果