线程异步编排串行(CompletableFuture)
Posted 伍妖捌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程异步编排串行(CompletableFuture)相关的知识,希望对你有一定的参考价值。
美图
创建异步对象
CompletableFuture提供了四个静态方法来创建一个异步操作
无返回值
- 不需要指定线程池,使用默认线程池
CompletableFuture<Void> runAsync(Runnable runnable);
- 需要指定线程池,使用指定线程池
CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)
有返回
- 不需要指定线程池,使用默认线程池
CompletableFuture<U> supplyAsync(Supplier<U> supplier)
- 需要指定线程池,使用指定线程池
CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)
示例
CompletableFuture.runAsync(() -> System.out.println("runAsync"));
Integer integer = CompletableFuture.supplyAsync(() -> 100).get();
线程执行之后的回调
在上个线程中继续执行下一步操作
CompletableFuture<T> whenComplete(BiConsumer<? super T, ? super Throwable> action)
在另一个空闲线程中继续执行下一步操作,默认线程池
CompletableFuture<T> whenCompleteAsync(BiConsumer<? super T, ? super Throwable> action)
在另一个空闲线程中继续执行下一步操作,指定线程池
CompletableFuture<T> whenCompleteAsync(BiConsumer<? super T, ? super Throwable> action, Executor executor)
只处理异常结果
CompletableFuture<T> exceptionally(Function<Throwable, ? extends T> fn)
示例
Integer integer = CompletableFuture.supplyAsync(() -> 100)
.whenCompleteAsync((res, throwable) -> {
if (throwable == null) {
System.out.println("成功的之后的下一步业务");
} else {
System.out.println("失败的之后的下一步业务");
}
}).get();
出现异常的时候,返回默认值
Integer integer = CompletableFuture.supplyAsync(() -> 100/0)
.exceptionally(throwable -> 10).get();
handle方法
可以对执行之后的结果做修改
CompletableFuture<U> handle(BiFunction<? super T, Throwable, ? extends U> fn)
CompletableFuture<U> handleAsync(BiFunction<? super T, Throwable, ? extends U> fn)
CompletableFuture<U> handleAsync(BiFunction<? super T, Throwable, ? extends U> fn, Executor executor)
线程串行化方法
thenRun
不需要获取上一步执行结果,上一步执行完成,接着执行,无返回值
CompletableFuture<Void> thenRun(Runnable action)
CompletableFuture<Void> thenRunAsync(Runnable action)
CompletableFuture<Void> thenRunAsync(Runnable action, Executor executor)
thenAccept
需要获取上一步执行结果,上一步执行完成,接着执行,无返回值
CompletableFuture<Void> thenAccept(Consumer<? super T> action)
CompletableFuture<Void> thenAcceptAsync(Consumer<? super T> action)
CompletableFuture<Void> thenAcceptAsync(Consumer<? super T> action, Executor executor)
需要获取上一步执行结果,上一步执行完成,接着执行,有返回值
CompletableFuture<U> thenApply(Function<? super T,? extends U> fn)
CompletableFuture<U> thenApplyAsync(Function<? super T,? extends U> fn)
CompletableFuture<U> thenApplyAsync(Function<? super T,? extends U> fn, Executor executor)
以上是关于线程异步编排串行(CompletableFuture)的主要内容,如果未能解决你的问题,请参考以下文章
CompletableFuture异步编排(线程串行化代码示例)
CompletableFuture异步编排(线程串行化代码示例)