我有一个测试间歇性失败,当 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/