一尘不染

听觉未来与完成未来

java

我尽力而为,但没有找到任何文章和博客可以清楚地比较ListenableFutureCompletableFuture,并且提供了很好的分析。

因此,如果任何人都可以向我解释或指向这样的博客或文章,那对我来说真的非常好。


阅读 222

收藏
2020-12-03

共1个答案

一尘不染

无论 ListenableFutureCompletableFuture 有超过它的父类的优势 未来
通过允许呼叫者在这样或那样的回调“注册”当异步动作已经完成被调用。

使用 Future, 您可以执行以下操作:

ExecutorService executor = ...;
Future f = executor.submit(...);
f.get();

f.get() 被阻塞,直到异步操作完成。

使用 ListenableFuture, 您可以像这样注册回调:

ListenableFuture listenable = service.submit(...);
    Futures.addCallback(listenable, new FutureCallback<Object>() {
                @Override
                public void onSuccess(Object o) {
                    //handle on success
                }

                @Override
                public void onFailure(Throwable throwable) {
                   //handle on failure
                }
            })

使用 CompletableFuture, 您还可以为任务完成时注册一个回调,但是它与 ListenableFuture
不同,因为它可以从任何希望完成任务的线程中完成。

CompletableFuture completableFuture = new CompletableFuture();
    completableFuture.whenComplete(new BiConsumer() {
        @Override
        public void accept(Object o, Object o2) {
            //handle complete
        }
    }); // complete the task
    completableFuture.complete(new Object())

当线程调用完成任务时,如果任务尚未完成,则通过调用get()接收的值将设置为参数值。

了解有关CompletableFuture的信息

2020-12-03