CompletableFuture的then开头的方法

CompletableFuture 提供了一系列以 then 开头的方法,它们允许你在异步操作完成之后执行不同的操作。这些方法大致可以分为几类,每类都有其特定的用途。下面是一些主要的方法及其区别:

1. thenApplythenApplyAsync

  • thenApply:

    • 用于在当前CompletableFuture完成后,对其结果进行转换或进一步处理。
    • 返回一个新的CompletableFuture,其结果是应用了提供的函数后的结果。
    • 函数默认由ForkJoinPool.commonPool()执行。
    CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "hello");
    CompletableFuture<String> upperCaseFuture = future.thenApply(String::toUpperCase);
    
  • thenApplyAsync:

    • 类似于thenApply,但允许你指定一个Executor来执行转换函数。
    • 这样可以更好地控制执行上下文和线程资源。
    CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "hello");
    CompletableFuture<String> upperCaseFutureAsync = future.thenApplyAsync(String::toUpperCase, executor);
    

2. thenAcceptthenAcceptAsync

  • thenAccept:

    • 用于在当前CompletableFuture完成后,消费其结果。
    • 不返回新的CompletableFuture,而是消费结果。
    • 函数默认由ForkJoinPool.commonPool()执行。
    CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "hello");
    future.thenAccept(System.out::println);
    
  • thenAcceptAsync:

    • 类似于thenAccept,但允许你指定一个Executor来执行消费函数。
    CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "hello");
    future.thenAcceptAsync(System.out::println, executor);
    

3. thenRunthenRunAsync

  • thenRun:

    • 用于在当前CompletableFuture完成后,执行一个无返回值的动作。
    • 不关心结果,只执行一个动作。
    • 动作默认由ForkJoinPool.commonPool()执行。
    CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "hello");
    future.thenRun(() -> System.out.println("Completed"));
    
  • thenRunAsync:

    • 类似于thenRun,但允许你指定一个Executor来执行动作。
    CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "hello");
    future.thenRunAsync(() -> System.out.println("Completed"), executor);
    

4. thenCombinethenCombineAsync

  • thenCombine:

    • 用于将当前CompletableFuture的结果与另一个CompletableFuture的结果结合起来,形成一个新的CompletableFuture
    • 函数默认由ForkJoinPool.commonPool()执行。
    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "hello");
    CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 123);
    CompletableFuture<String> combinedFuture = future1.thenCombine(future2, (s, i) -> s + i);
    
  • thenCombineAsync:

    • 类似于thenCombine,但允许你指定一个Executor来执行组合函数。
    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "hello");
    CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 123);
    CompletableFuture<String> combinedFutureAsync = future1.thenCombineAsync(future2, (s, i) -> s + i, executor);
    

5. thenComposethenComposeAsync

  • thenCompose:

    • 用于在当前CompletableFuture完成后,根据其结果创建并返回一个新的CompletableFuture
    • 适用于链式调用,其中下一个操作依赖于前一个操作的结果。
    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "hello");
    CompletableFuture<String> composedFuture = future1.thenCompose(s -> CompletableFuture.supplyAsync(() -> s.toUpperCase()));
    
  • thenComposeAsync:

    • 类似于thenCompose,但允许你指定一个Executor来执行下一个CompletableFuture的操作。
    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "hello");
    CompletableFuture<String> composedFutureAsync = future1.thenComposeAsync(s -> CompletableFuture.supplyAsync(() -> s.toUpperCase()), executor);
    

总结

  • thenApplythenApplyAsync 用于转换结果。
  • thenAcceptthenAcceptAsync 用于消费结果。
  • thenRunthenRunAsync 用于执行动作。
  • thenCombinethenCombineAsync 用于结合两个CompletableFuture的结果。
  • thenComposethenComposeAsync 用于创建新的CompletableFuture链。

这些方法可以帮助你构建复杂的异步工作流,同时保持代码的可读性和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值