未来造成无限循环

时间:2015-09-02 12:10:12

标签: java

我的Java代码看起来像这样......

package java.uyil.concurrent;
...


Future<> future= ...;
try {
    while(!future.isDone()) {
    }
}catch(Exception e) {
}

基本上,代码应该在while循环中运行,直到将来的任务完成。出于某种原因,这个代码在一个用户的PC上失败了,循环似乎永远存在。在其他PC上运行正常。

我是否遗漏了某些内容,是否有人知道线程和未来任务足以帮助您?

2 个答案:

答案 0 :(得分:3)

所以你想阻止流程,直到你得到未来的结果。你不需要使用while循环,而是直接使用future.get(),它会阻塞直到你得到结果。

答案 1 :(得分:1)

如果您在启动之前取消未来,则永远不会进入isDone() == true

来自Javadoc for Future.isDone()

  

@return {@code true}如果此任务已完成

如果您不想使用Future.get(),则可以

while(!future.isDone() && !future.isCancelled()) {
    Thread.yield();
}