无论 ListenableFuture 和 CompletableFuture 有超过它的父类的优势 未来
通过允许呼叫者在这样或那样的回调“注册”当异步动作已经完成被调用。
使用 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的信息



