Listenablefuture VS Completablefuture

问题描述 投票:37回答:1

我努力,但没有发现任何文章或博客这显然比较ListenableFutureCompletableFuture,并提供了一个很好的分析。

因此,如果任何人都可以解释或指向我这样一个博客或物品,这将是对我真的很好。

java completable-future
1个回答
40
投票

无论ListenableFuture和CompletableFuture允许当异步操作已经完成了这样或那样的回调调用者“登记”被称为有超过它的父类未来的优势。

随着将来你可以这样做:

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())

当一个线程调用完成的任务,从接收到呼叫的价值得到()设置与参数值,如果任务没有已经完成。

Read about CompletableFuture

© www.soinside.com 2019 - 2024. All rights reserved.