我有在JVM立即用各种新的应用程序,我写它通过斯卡拉2.10期货+承诺框架生成线程退出麻烦。
看来,至少在默认执行环境,即使我使用的是阻塞,如
future { blocking { /* work */ }}
没有非守护线程启动,因此JVM认为它可以立即退出。
愚蠢的解决办法是推出一个虚拟Thread
它只是在等待实例,但后来我也需要确保当工序均由内部完成这个线程停止。
因此,如何加强我他们在非守护线程运行?
我有在JVM立即用各种新的应用程序,我写它通过斯卡拉2.10期货+承诺框架生成线程退出麻烦。
看来,至少在默认执行环境,即使我使用的是阻塞,如
future { blocking { /* work */ }}
没有非守护线程启动,因此JVM认为它可以立即退出。
愚蠢的解决办法是推出一个虚拟Thread
它只是在等待实例,但后来我也需要确保当工序均由内部完成这个线程停止。
因此,如何加强我他们在非守护线程运行?
在着眼于默认ExecutionContext
附着ExecutionContext.global
,它的叉加入品种和Threadfactory
它使用套线程daemon
。 如果要解决这个问题,你可以使用不同ExecutionContext
,一个你建立你自己。 如果您仍然希望FJP品种(你可能做的,因为它扩展了最好的),你应该能够看到他们在做什么ExecutionContextImpl
通过这个链接 ,并创建类似的东西。 或者只是使用一个缓存的线程池通过Executors.newCachedThreadPool
为您之前完成期货不会立即关闭。
产卵过程
如果这意味着过程并不仅仅是任务,然后scala.sys.process产卵非守护线程来运行操作系统进程。
否则,如果你创建了一堆的任务,这就是Future.sequence与帮助。 然后,只需等待主线程准备(未来顺序列表(期货))。