在Scala中,Futures.awaitAll是否在超时时终止线程?

在Scala中,Futures.awaitAll是否在超时时终止线程?,scala,concurrency,jvm,akka,Scala,Concurrency,Jvm,Akka,因此,我正在用scala编写一个迷你超时库,它看起来与这里的代码非常相似: 我执行的函数要么将成功完成,要么将永远阻塞,因此我需要确保在超时时取消执行线程 因此,我的问题是:在超时时,waitall是终止底层actor,还是让它永远运行? 我正在考虑的另一种选择是使用java Future库来实现这一点,因为有一个显式的cancel()方法可以调用。[免责声明-我本人是Scala actors的新手] 正如我所读到的,scala.actors.Futures.waitAll等待,直到期货列表全部

因此,我正在用scala编写一个迷你超时库,它看起来与这里的代码非常相似:

我执行的函数要么将成功完成,要么将永远阻塞,因此我需要确保在超时时取消执行线程

因此,我的问题是:在超时时,waitall是终止底层actor,还是让它永远运行?


我正在考虑的另一种选择是使用java Future库来实现这一点,因为有一个显式的cancel()方法可以调用。

[免责声明-我本人是Scala actors的新手] 正如我所读到的,
scala.actors.Futures.waitAll
等待,直到期货列表全部解决或超时。它不会
未来。取消
线程。中断
,或尝试终止
未来
;你可以晚点回来再等一会儿

Future.cancel
可能是合适的,但是请注意,您的代码可能需要参与执行
cancel
操作-它不一定是免费的<代码>未来。取消
取消已计划但尚未启动的任务。它会中断正在运行的线程[设置可检查的标志]。。。可以确认也可以不确认中断。查看
Thread.interrupt
Thread.isInterrupted()
。长时间运行的任务通常会检查它是否被中断(代码),然后自行终止。各种方法(即
Thread.sleep
Object.wait
和其他方法)通过抛出
InterruptedException
来响应中断。您需要检查并理解该机制,以确保您的代码在这些约束条件下满足您的需求。请参阅。

您所说的“永远封锁”是什么意思&ndash;这是阻塞I/O吗?可能改用异步I/O。建议不要硬中断Java线程。否则,如果区块仍在“接收”,为什么不使用参与者方法,如你链接的问题中给出的Viktor Klang的答案所示?然后你可以给那个演员发一条堕胎信息。