Ash*_*Jha 49 java completable-future
我努力,但没有发现任何文章或博客清楚地比较ListenableFuture和CompletableFuture,并提供了一个很好的分析.
因此,如果有人能够解释或指向我这样的博客或文章,那对我来说真的很好.
小智 43
无论ListenableFuture和CompletableFuture有超过它的父类的优势未来将允许当异步操作已经完成了这样或那样的回调调用者"登记"被调用.
有了Future,你可以这样做:
ExecutorService executor = ...;
Future f = executor.submit(...);
f.get();
Run Code Online (Sandbox Code Playgroud)
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
}
})
Run Code Online (Sandbox Code Playgroud)
使用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())
Run Code Online (Sandbox Code Playgroud)
当线程调用任务完成时,如果任务尚未完成,则使用参数值设置从get()调用接收的值.
| 归档时间: |
|
| 查看次数: |
20646 次 |
| 最近记录: |