我的Java代码看起来像这样......
package java.uyil.concurrent;
...
Future<> future= ...;
try {
while(!future.isDone()) {
}
}catch(Exception e) {
}
基本上,代码应该在while循环中运行,直到将来的任务完成。出于某种原因,这个代码在一个用户的PC上失败了,循环似乎永远存在。在其他PC上运行正常。
我是否遗漏了某些内容,是否有人知道线程和未来任务足以帮助您?
答案 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();
}