Java future.get在取消时可调用中最终执行之前返回

Java future.get在取消时可调用中最终执行之前返回,java,concurrency,future,Java,Concurrency,Future,我有一个测试间歇性失败,其中future.get调用在Callable中执行finally块之前返回,future被取消。以下是基本工作流程: 未来是真实的 我看到InterrupedException在Callable中抛出 主线程从future.get调用捕获CancellationException 现在,可调用的调用终于开始了 测试在我的笔记本上总是成功的,在我们的构建服务器上大部分时间都失败了。我的笔记本和构建服务器都运行OpenJDK1.7。有什么想法吗?cancel的文档似乎没有指

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

未来是真实的

我看到InterrupedException在Callable中抛出

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

现在,可调用的调用终于开始了


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

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

你能发布相关代码吗?是的,我认为这是一个bug,因为没有记录这种行为