并发未来 - 如果已经完成,则调用get()吗?

时间:2014-12-03 14:40:12

标签: 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";
  }
}

无论如何都被get()召唤了两次?

1 个答案:

答案 0 :(得分:2)

许多线程很多次调用get很可能(并且在多线程环境中很常见)。

如果您希望实施Future<V>,您必须执行完整的合同 - 包括:

  

Future ...只有在计算完成后才能使用方法get检索结果,必要时会阻塞直到它准备就绪。

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