【Java异步编程】CompletableFuture实现:异步任务的串行执行

在 Java 异步编程中,CompletableFuture 类提供了多种方法来处理任务的依赖和执行顺序。理解这些方法如何协同工作,可以帮助我们更高效地处理复杂的异步操作。

一. thenApply():转换计算结果

thenApply() 方法允许我们在前一个 CompletableFuture 执行完成后,基于其计算结果执行转换操作,并返回一个新的 CompletableFuture。这个方法非常适合用于链式转换操作,例如数据转换或映射。

1. 一个线程中执行或多个线程中执行

三个重载方法如下:

     //后一个任务与前一个任务在同一个线程中执行
     public <U> CompletableFuture<U> thenApply(
                                 Function<? super T,? extends U> fn)
     
     //后一个任务与前一个任务不在同一个线程中执行
     public <U> CompletableFuture<U> thenApplyAsync(
                                 Function<? super T,? extends U> fn)
     
     //后一个任务在指定的executor线程池中执行 
     public <U> CompletableFuture<U> thenApplyAsync(
                                 Function<? super T,? extends U> fn, Executor executor)

可以看到thenApply可以将前后任务串到一个线程中执行,或者异步执行。

 

2. 使用场景说明

假设你从一个异步任务中获取了一个整数结果,而你需要对其进行一些计算或转换。通过 thenApply(),你可以轻松地对该结果进行处理。

CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 2);
future.thenApply(result -> result * 2)  // result = 2, 返回结果是 4
      .thenAccept(result -> System.out.println(result));  // 输出 4

> **分析**> 
> - `CompletableFuture.supplyAsync(() -> 2)`:异步执行任务,返回结果 2> - `thenApply(result -> result * 2)`:对结果进行转换,返回 4> - `thenAccept(result -> System.out.println(result))`:消费结果,打印 4> 
> `thenApply()` 适用于当我们需要基于前一个任务的计算结果执行某种转换时,它帮助我们创建一个新的异步任务,并将处理后的结果返回。

 
再看一个例子:

@Test  
public void thenApplyDemo() throws Exception {
     
    CompletableFuture<Long> future = CompletableFuture.supplyAsync(new Supplier<Long>() {
     
        @Over
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值