CompletableFuture 方法整理

5 篇文章 0 订阅
2 篇文章 0 订阅

详细参考:https://blog.csdn.net/qq_31865983/article/details/106137777

一般api

  • supplyAsync() 创建带返回值的异步任务
    • ps:第一个参数是个Supplier接口,第二个参数Executor 线程池可以不填,默认是内部指定的common(orkJoinPool.commonPool())线程池,也可以自己指定线程池
  • runAsync 创建无返回值的异步任务
  • thenApply 表示某个CompletableFuture任务执行完成之后执行下一个任务,即回调方法。
    • 有一个参数,是上一个任务的结果。
    • 返回一个新任务
    • 前后两个任务共用同一个线程。
  • thenApplyAsync thenApplyAsync与thenApply的区别在于,前者是将job2提交到线程池中异步执行,实际执行job2的线程可能是另外一个线程,后者是由执行job1的线程立即执行job2,即两个job都是同一个线程执行的。
    • 前后两个任务可能同一个也可能不同
  • thenAccept 与thenApply类似,只是没有返回新任务
  • thenRun 没有参数,也没有返回新任务
  • exceptionally 上一个任务异常时执行的方法,会将上一个任务抛出的异常作为入参
  • whenComplete   是当某个任务执行完成后执行的回调方法。
    • 有两个入参,第一个上一个的任务,第二个是上一个任务可能抛出的异常。
    • 如果是正常执行的则传入的第二个参数为null
    • 没有返回值
  • handle 与whenComplete类似,区别在于有返回值

组合api

  • thenCombine / thenAcceptBoth / runAfterBoth 都是将两个CompletableFuture组合起来,只有这两个都正常执行完了才会执行某个任务

    • thenCombine 有返回值,两个任务的执行结果作为方法入参传递到指定方法中
    • thenAcceptBoth 无返回值,两个任务的执行结果作为方法入参传递到指定方法中
    • runAfterBoth 无返回值,无参数
  • applyToEither / acceptEither / runAfterEither 将两个CompletableFuture组合起来,只要其中一个执行完了就会执行某个任务

    • applyToEither 有返回值,执行完成的某个任务作为入参
    • acceptEither 无返回值,执行完成的某个任务作为入参
    • runAfterEither 无返回值,无入参
  • thenCompose

    • 方法会在某个任务执行完成后,将该任务的执行结果作为方法入参
    • 有返回值,该方法会返回一个新的CompletableFuture实例。(eg:return CompletableFuture.supplyAsync)
  • allOf / anyOf 对应多个任务,不止2个

    • allOf
      • 多个任务都执行完成后才会执行,有一个任务异常即终止
      • eg:CompletableFuture.allOf(cf,cf2,cf3).whenComplete((a,b)->{})
      • 两个入参,第一个是任务的结果,第二个是异常,如果都是正常执行,则null
    • anyOf 与allOf的区别是 多个任务只要有一个任务完成就行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CompletableFutureJava 8引入的一个类,用于支持异步编程和处理异步任务的结果。它提供了一系列常用的方法来操作和组合异步任务。以下是CompletableFuture的一些常用方法: 1. `supplyAsync(Supplier<U> supplier)`:创建一个CompletableFuture对象,该对象会异步执行给定的Supplier任务,并返回计算结果。 2. `thenApply(Function<? super T,? extends U> function)`:对CompletableFuture的结果应用给定的函数,并返回一个新的CompletableFuture对象。 3. `thenAccept(Consumer<? super T> action)`:对CompletableFuture的结果应用给定的消费者函数,不返回任何结果。 4. `thenRun(Runnable action)`:在CompletableFuture完成后执行给定的Runnable任务。 5. `thenCompose(Function<? super T,? extends CompletionStage<U>> fn)`:将CompletableFuture的结果传递给给定的函数,并返回一个新的CompletableFuture对象。 6. `exceptionally(Function<Throwable,? extends T> fn)`:在CompletableFuture发生异常时,应用给定的函数处理异常,并返回一个新的CompletableFuture对象。 7. `handle(BiFunction<? super T,Throwable,? extends U> fn)`:对CompletableFuture的结果或异常应用给定的函数,并返回一个新的CompletableFuture对象。 8. `allOf(CompletableFuture<?>... cfs)`:等待所有给定的CompletableFuture对象完成后,返回一个新的CompletableFuture对象。 9. `anyOf(CompletableFuture<?>... cfs)`:等待任意一个给定的CompletableFuture对象完成后,返回一个新的CompletableFuture对象。 以上是CompletableFuture的一些常用方法,你可以根据具体的需求选择合适的方法来处理异步任务。如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值