Java未来异步?

Java未来异步?,java,asynchronous,future,Java,Asynchronous,Future,从Java文档: 未来表示异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法 如果有方法等待完成,那么它是如何异步的呢?我对异步操作的理解是,调用者只需调用它,然后转移到其他任务。调用者会自动知道完成,并给出结果。这是错的吗 我对异步操作的理解是,调用方只需对其进行调用,就可以转移到其他任务 看。这个术语指的是时间安排,而不是协调技术 由另一个线程在后台执行的任务随时都会发生。与原始线程协调是一个不相关的问题,“异步”术语既不要求也不拒绝。因此,是的,当后台线程执行委托任务

从Java文档:

未来表示异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法

如果有方法等待完成,那么它是如何异步的呢?我对异步操作的理解是,调用者只需调用它,然后转移到其他任务。调用者会自动知道完成,并给出结果。这是错的吗

我对异步操作的理解是,调用方只需对其进行调用,就可以转移到其他任务

看。这个术语指的是时间安排,而不是协调技术

由另一个线程在后台执行的任务随时都会发生。与原始线程协调是一个不相关的问题,“异步”术语既不要求也不拒绝。因此,是的,当后台线程执行委托任务时,发起线程/对象可以自由地继续执行其他工作。原始线程/对象可能会或可能不会被通知任务的完成

调用者会自动知道完成,并给出结果。这是错的吗

是的,那是错误的委派的任务可能与原始线程/对象无关。发起线程/对象可能对任务的完成不感兴趣,如果是这样,肯定不希望以任何方式被中断

即使发起线程确实关心委托任务的完成,定义为异步也不会定义一个通知发起线程的工具。在过去的C风格编码中,通常定义回调函数。在本发明中,存在可通过其通知发起对象的各种技术。其中一种技术是让原始对象通过询问任务来检查任务的状态

这在
Future
类文档中显示的示例代码中得到了演示:

interface ArchiveSearcher { String search(String target); }
class App {
  ExecutorService executor = ...
  ArchiveSearcher searcher = ...
  void showSearch(String target) throws InterruptedException {
    Callable<String> task = () -> searcher.search(target);
    Future<String> future = executor.submit(task);
    displayOtherThings(); // do other things while searching
    try {
      displayText(future.get()); // use future
    } catch (ExecutionException ex) { cleanup(); return; }
  }
}
接口ArchiveSearcher{字符串搜索(字符串目标);}
类应用程序{
executor服务executor=。。。
ArchiveSearcher搜索器=。。。
void showSearch(字符串目标)抛出InterruptedException{
可调用任务=()->searcher.search(目标);
未来=执行者提交(任务);
displayOtherThings();//搜索时执行其他操作
试一试{
displayText(future.get());//使用future
}catch(ExecutionException ex){cleanup();return;}
}
}

请注意,Java8带来了新的、有用的
未来实现。

有异步计算和异步交互。通常异步计算使用异步交互,而同步计算使用同步交互。同步计算是线程,同步交互是阻塞队列、信号量等


但是同步和异步世界需要相互作用,这里出现了
Future
:它向同步计算(线程)提供异步操作的结果。

感谢您的有用输入。我对未来有一个问题:如果我必须继续询问未来,“那么,这不是也和打断一样吗?”曼德罗德反复问你的孩子,他们的家庭作业是否和你的孩子来找你时做的一样,并打断你,告诉你他们的家庭作业已经完成了?