gpt4 book ai didi

Java future 异步?

转载 作者:行者123 更新时间:2023-11-29 04:20:50 26 4
gpt4 key购买 nike

来自 Java 文档:

A Future represents the result of an asynchronous computation. Methods are provided to check if the computation is complete, to wait for its completion, and to retrieve the result of the computation.

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

最佳答案

My understanding of asynchronous operation is that caller can just make a call to it, and just move to some other task.

参见 definition of asynchronous operation .该术语指的是时间,而不是协调技术。

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

And caller would come to know of the completion automatically, with result. Is this wrong?

是的,这是错误的。 委托(delegate)的任务可能与原始线程/对象无关。发起线程/对象可能对任务的完成不感兴趣,如果是这种情况,当然不希望以任何方式被打断。

即使发起线程确实关心委托(delegate)任务的完成,根据定义异步并没有定义通知发起线程的工具。在过去的 C 风格编码中,通常定义回调函数。在 OOP可以通过多种技术通知原始对象。其中一项技术是让原始对象通过询问 Future 来检查任务的状态。 .

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; }
}
}

请注意,Java 8 带来了新的有用的Future 实现。

关于Java future 异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49269162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com