gpt4 book ai didi

java - ListenableFuture 或调用函数来处理任务结果?

转载 作者:行者123 更新时间:2023-12-01 09:22:35 26 4
gpt4 key购买 nike

在向 ExecutorService 提交任务时,使用 ListenableFuture 处理结果是否有任何优势,而不是通过简单地调用处理该任务的函数来以普通的旧 java 方式进行处理?结果?

future :

Future<ScanResult> result = threadPoolExecutor.submit(
new Callable<ScanResult>() {
//long running process to get scanResult
return scanResult;
});
ScanResult sr = result.get();

使用 Guava ListenableFuture来防止手动get()调用。

纯 Java 方式:

threadPoolExecutor.submit(new Callable<Void>() {
@Override
public Void call() throws Exception {
//long running process to get scanResult
jobCompleted(scanResult);
return null;
}
});

最佳答案

我没有研究过 Guava Concurrency 或 ListenableFuture,但我认为主要优点是通用的基于事件的程序设计,它比手动触发基于代码的程序更容易理解和可视化关于事件。

Future.get() 是一种阻塞方法,因此无论如何您都会被阻塞,直到 Callable 完成,因此您将两个独立的代码执行路径耦合到单个执行路径中。添加监听器可以将它们解耦,并根据事件将它们逻辑耦合。

同时按照github link ,强烈建议使用它,我猜其原因可能是 ListenableFuture 支持的附加服务可能不存在于普通的 Future 中。

希望对你有帮助!!

关于java - ListenableFuture 或调用函数来处理任务结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40072885/

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