我必须运行复杂的异步计算,并能够随时中止它们(从计算外部)。
当前实现使用 scala.concurrent.Future 来运行计算。然而,似乎没有一种明显的方法可以在执行期间取消 scala Future。
我发现并尝试了许多针对此问题的推荐解决方案,例如使用 Promise 来实现 cancellable Future或使用 java.util.concurrent.Future 其 cancel()方法。
它们都有相同的问题:执行仅在到达 Thread.sleep() 调用时才会中止。
这是一个问题,原因有两个:
- 计算应尽快完成。即使增加非常短的 sleep 时间也会适得其反。
- 我不是这些计算的主要开发人员,我希望避免对计算的实现施加任意限制。
最佳答案
在 JVM 中,您无法终止线程。停止计算的唯一安全方法是中断它,这意味着设置标志/检查标志并停止逻辑。因此,为了尽快停止计算,您需要尽可能频繁地检查中断标志。在您的可运行/可调用实现中实现它,您将获得所需的结果。
关于java - 如何随时取消异步计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42364538/