java - future.get 在取消时最终在 Callable 中执行之前返回

标签 java concurrency future

我有一个测试间歇性失败,当 future 被取消时,future.get 调用在 Callable 中执行 finally block 之前返回。这是基本工作流程:

future.cancel(true);

我看到 Callable 中抛出了 InterrupedException

主线程从 future.get 调用中捕获 CancellationException

现在,Callable 调用finally

测试在我的笔记本上总是成功的,但在我们的构建服务器上大部分时间都失败。我的笔记本和构建服务器都运行 OpenJDK 1.7。有什么想法吗?

最佳答案

cancel()的文档似乎没有指定它等待被中断的线程退出。如果你想要这样的保证,你必须设置一个监视器或其他一些同步机制,使取消者可以等待处理器说“我已经完成了我的finally block ”。

关于java - future.get 在取消时最终在 Callable 中执行之前返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7573033/

相关文章:

java - 轴2迁移

java - 具有任意 JSON 键的 Jackson ObjectMapper

java - tryLock 未释放的资源

java - 执行人服务。当所有线程都终止时如何等待

scala - Scala 中的 Future 和无限循环

c++ - pthread_once() 中的竞争条件?

java - Elastic Beanstalk CLI 部署 jar

java - 如果我将 jenkins.war 和 nexus.war 放在一起,Tomcat 7 无法工作

swift - NSURLSession 与 Alamofire 的并发请求

python - 为什么 asyncio 中的异常迟到或根本不出现?