【发布时间】:2019-10-10 10:05:24
【问题描述】:
我正在使用 Java 8。我想知道如何判断 Future 对象何时完成其任务。我尝试通过编写以下内容来理解它
Callable<Long> c = new Callable<Long>() {
@Override
public Long call() throws Exception {
return new Long(factorial(1));
}
};
ExecutorService s = Executors.newFixedThreadPool(2);
Future<Long> f = s.submit(c);
while (!f.isDone())
{
System.out.println("waiting..." + f.get().toString());
} // while
System.out.println(f.get().toString());
但 while 循环永远不会返回(f.isDone() 始终为 false),即使我知道有一个计算结果。
【问题讨论】:
-
为什么要同步等待异步任务完成?这和在你当前的同步码流中做任务一样好。
-
Future.get() 是一种阻塞方法。这是根本。
-
如果
factorial返回long(或可以转换为long的原语),则无需调用new Long(...),Java 将为您自动装箱。跨度>
标签: java multithreading future callable