java - 如何随时取消异步计算?

标签 java multithreading scala concurrency akka

我必须运行复杂的异步计算,并能够随时中止它们(从计算外部)。

当前实现使用 scala.concurrent.Future 来运行计算。然而,似乎没有一种明显的方法可以在执行期间取消 scala Future。

我发现并尝试了许多针对此问题的推荐解决方案,例如使用 Promise 来实现 cancellable Future或使用 java.util.concurrent.Future 其 cancel()方法。

它们都有相同的问题:执行仅在到达 Thread.sleep() 调用时才会中止。

这是一个问题,原因有两个:

  1. 计算应尽快完成。即使增加非常短的 sleep 时间也会适得其反。
  2. 我不是这些计算的主要开发人员,我希望避免对计算的实现施加任意限制。

最佳答案

在 JVM 中,您无法终止线程。停止计算的唯一安全方法是中断它,这意味着设置标志/检查标志并停止逻辑。因此,为了尽快停止计算,您需要尽可能频繁地检查中断标志。在您的可运行/可调用实现中实现它,您将获得所需的结果。

关于java - 如何随时取消异步计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42364538/

相关文章:

java - 使用有界继承重写 Scala 中 Java 类的抽象方法

scala - (数组/ML Vector/MLlib Vector)RDD 到 ML Vector Dataframe 可以

c++ - 多线程和内存

c++ - 使用信号和槽实现 connect() 时遇到问题

scala - 为什么 scala.xml.Atom 类型参数化?

java - 如何在 CentOS 上安装 Java SDK?

java - web.xml 文档中根元素后面的标记必须格式正确

Java JPanel 不会出现在 Linux 中的 JFrame 中

当我加载 jar 时出现 java.lang.UnsatisfiedLinkError 。

android - 几次运行后,AsyncTask 在 onPreExecute 后停止