Java 并发未来-如果已经调用get(),是否调用它?

Java 并发未来-如果已经调用get(),是否调用它?,java,java.util.concurrent,Java,Java.util.concurrent,像这样使用Future: public class Foo implements Future<Object>{ boolean done=false; public boolean isDone(){ return done; } public Object get(){ done = true; return "hi"; } } 公共类Foo实现未来{ 布尔完成=假; 公共布尔isDone(){ 已完成的返回; } 公共对象get()

像这样使用
Future

public class Foo implements Future<Object>{
  boolean done=false;
  public boolean isDone(){
    return done;
  }
  public Object get(){
    done = true;
    return "hi";
  }
}
公共类Foo实现未来{
布尔完成=假;
公共布尔isDone(){
已完成的返回;
}
公共对象get(){
完成=正确;
返回“hi”;
}
}
无论如何,
get()
调用了两次吗?

许多线程很可能多次调用
get

如果您希望在未来实施,您必须实施完整的合同-包括:

。。。只有在计算完成后,才能使用方法
get
检索结果,如有必要,将其阻塞,直到准备就绪


因此,您必须确保对
get
的调用会一直阻塞,直到任务完成,然后才能传递任务的结果。

我不明白。在您的示例中,
get
在哪里调用?为什么要调用两次?请再显示一些代码。通常情况下,Futures表示执行者通过实现返回的异步任务。典型的用法是提交任务,获取未来,如果执行Future.get(),实现将一直阻塞,直到计算完成。我不确定你在什么环境下使用它。更多关于这里的正常用法:@Blitzkr1eg-sure,假设已经调用了
get()
,它会被调用两次还是被
ExecutionService
缓存的结果?执行器不会调用
get
。太糟糕了,我希望让执行器服务与类的实例同步,让他自己缓存结果。