1. 背景
1.4. CompletableFuture
CompletableFuture
对 Future
进行了扩展, 提供了一大批创建/编排/组合异步任务的方法, 同时支持异常回调, 在一定程度上解决了回调地狱的问题.
2. 使用介绍
2.1. 创建CompletableFuture
-
public static CompletableFuture runAsync(Runnable)
-
public static CompletableFuture supplyAsync(Supplier)
-
public static CompletableFuture completedFuture(U)
2.2. 获取任务状态
-
boolean isDone()
-
boolean isCompletedExceptionally()
-
boolean isCancelled()
2.3. 获取任务结果
-
T get()
-
T get(long, TimeUnit)
-
T getNow(T)
-
void join()
2.4. CompletionStage方法模板
CompletionStage
一共包含 \$14xx3+1\$个方法.
-
CompletionStage somethingAsync(…, Executor);
由指定的线程池执行任务. -
CompletionStage somethingAsync(…);
由ForJoinPool
或者新建线程执行任务. -
CompletionStage something(…);
由调用方线程执行任务. -
CompletableFuture<T> toCompletableFuture();
异步任务通过 lambda
函数接口抽象出来:
-
Apply:
Function, BiFunction
-
Accept:
Consumer, BiConsumer
-
Run:
Runnable
2.6. 转换(2→1)
-
thenCombine(CompletionStage, BiFunction);
-
thenAcceptBoth(CompletionStage, BiConsumer);
-
runAfterBoth(CompletionStage, Runnable);
-
applyToEither(CompletionStage, Function);
-
acceptEither(CompletionStage, Consumer);
-
runAfterEither(CompletionStage, Runnable);
-
CompletionStage thenCompose(Function);
2.7. 异常处理
-
handle(BiFunction<T, Throwable, U>);
异常处理/任务结果转换 -
whenComplete(BiConsumer<T, Throwable>);
异常处理/任务结果处理 -
exceptionally(Function<Throwable, T>);
异常处理/自定义任务结果 -
exceptionallyCompose(Function<Throwable, CompletionStage>);
异常处理/组装新的异步任务
场景 | handle |
whenComplete |
exceptionally(Compose) |
---|---|---|---|
任务成功后回调 |
√ |
√ |
x |
任务异常后回调 |
√ |
√ |
√ |
异常后能返回自定义的任务结果 |
√ |
x |
√ |
异常后能返回新的任务结果类型 |
√ |
x |
x |
2.8. 超时处理
-
CompletableFuture orTimeout(long, TimeUnit)
到达超时时间后取消任务 -
CompletableFuture completeOnTimeout(T, long, TimeUnit)
到达超时时间后返回自定义的任务结果
2.10. anyOf
-
public static CompletableFuture anyOf(CompletableFuture…)
5. 总结
-
丰富的异步任务API, 覆盖链式任务, 组合任务等场景.
-
命令式操纵异步线程.
-
异常处理.