使用这样的Future
:
public class Foo implements Future<Object>{
boolean done=false;
public boolean isDone(){
return done;
}
public Object get(){
done = true;
return "hi";
}
}
无论如何都被get()
召唤了两次?
答案 0 :(得分:2)
许多线程很多次调用get
很可能(并且在多线程环境中很常见)。
如果您希望实施Future<V>
,您必须执行完整的合同 - 包括:
Future ...只有在计算完成后才能使用方法
get
检索结果,必要时会阻塞直到它准备就绪。
因此,您必须确保对get
的调用阻止,直到任务完成,然后传递任务结果。