我必须运行复杂的异步计算,并且能够在任何时间(从计算外部)中止它们。
当前实现使用scala.concurrent.Future来运行计算。但是,在执行过程中,似乎没有一种明显的方法可以取消scala Future。
我已经找到并尝试了一些针对此问题的推荐解决方案,例如使用Promise实现cancellable Future或使用带有cancel()的java.util.concurrent.Future方法
它们都有同样的问题:执行只在到达Thread.sleep()调用时中止。
这是一个问题,原因有两个:
答案 0 :(得分:3)
在JVM中,你不能杀死一个线程。停止计算的唯一安全方法是中断它,这意味着设置标志/检查标志并停止逻辑。因此,为了尽可能快地停止计算,您需要尽可能频繁地检查中断的标志。在runnable / callable实现中实现它,您将获得所需的结果。