我努力,但没有发现任何文章或博客这显然比较ListenableFuture
和CompletableFuture
,并提供了一个很好的分析。
因此,如果任何人都可以解释或指向我这样一个博客或物品,这将是对我真的很好。
无论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())
当一个线程调用完成的任务,从接收到呼叫的价值得到()设置与参数值,如果任务没有已经完成。