CompletableFuture使用

一、概览

  • 没有指定Executor的方法会使用ForkJoinPool.commonPool() 作为它的线程池执行异步代码。

二、创建CompletableFuture对象

/** 比较特殊,他入参就是返回值,也就是说他可以用来执行需要其他返回值的异步任务。 */
public static <U> CompletableFuture<U> completedFuture(U value)

/** 无返回值,使用默认线程池 */
public static CompletableFuture<Void> runAsync(Runnable runnable)

/** 无返回值,使用自定义线程池 */
public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)

/** 有返回值,使用默认线程池 */
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)

/** 有返回值,使用自定义线程池 */
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)

示例

CompletableFuture<String> supplyAsync = CompletableFuture.supplyAsync(() -> "测试CompletableFuture");
System.out.println(supplyAsync.get());

三、CompletableFuture对象操作

1.计算结果完成时的回调方法

当CompletableFuture的计算结果完成,或者抛出异常的时候,可以执行特定的Action。没法修改返回结果。

// BiConsumer<T,U> 函数接口有两个参数,无返回值。
// Function<T,R> 函数接口有一个输入参数,返回一个结果。
/** 无Async,同步处理正常计算结果或异常,使用执行任务的那个线程来执行该方法,所以这个方法是同步的。 */
public CompletableFuture<T> whenComplete(BiConsumer<? super T,? super Throwable> action)
/** 有Async,异步处理正常计算结果或异常,使用执行任务的那个线程池中的线程来执行该方法!所以这个方法是异步的。 */
public CompletableFuture<T> whenCompleteAsync(BiConsumer<? super T,? super Throwable> action)
/** 有Async,异步处理正常计算结果或异常,使用自定义线程池来执行该方法,所以这个方法是异步的。 */
public CompletableFuture<T> whenCompleteAsync(BiConsumer<? super T,? superThrowable> action, Executor executor)
/** 处理异常。 */
public CompletableFuture<T> exceptionally(Function<Throwable,? extends T> fn)

whenCompletewhenCompleteAsync 的区别:
whenComplete:是执行当前任务的线程执行继续执行 whenComplete 的任务。
whenCompleteAsync:是执行把 whenCompleteAsync 这个任务继续提交给线程池来进行执行。

2.handle 方法

handle 是执行任务完成时对结果的处理。thenApply 只可以执行正常的任务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值