gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:44:32 24 4
gpt4 key购买 nike

我在使用我编写的各种新应用程序时遇到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com