CompletableFuture.allOf 和 thenCombine 区别

前言:在多线程程序中,遇到需要等待多个异步线程执行之后的操作,可能会用到 CompletableFuture.allOf 或者 thenCombine ,那么他们的区别是什么

thenCombineCompletableFuture.allOf 在某些方面有相似之处,但它们的作用和用法是不同的。

  1. CompletableFuture.allOf

    • allOf 是一个静态方法,它接受一个 CompletableFuture 数组(或可变参数列表),并返回一个新的 CompletableFuture<Void>
    • 这个返回的 CompletableFuture<Void> 会在所有传入的 CompletableFuture 任务都完成时完成。
    • 它通常用于等待多个 CompletableFuture 任务都完成,但不关心它们的结果。
    • 你可以通过调用 join() 方法来阻塞当前线程,直到所有任务都完成,或者使用 thenRun 方法来在所有任务完成后执行一些代码。
  2. thenCombine

    • thenCombine 是一个实例方法,它接受另一个 CompletableFuture 和一个 BiFunction,并返回一个新的 CompletableFuture
    • 这个新的 CompletableFuture 会在调用 thenCombineCompletableFuture 和传入的 CompletableFuture 都完成时完成。
    • 它将两个 CompletableFuture 的结果作为输入传递给 BiFunction,并返回 BiFunction 的结果作为新 CompletableFuture 的结果。
    • thenCombine 用于当两个任务都完成时,将它们的结果组合起来。

因此,虽然 allOfthenCombine 都涉及等待多个任务完成,但它们的主要区别在于:

  • allOf 用于等待多个任务完成,但不关心它们的结果。
  • thenCombine 用于等待两个任务完成,并将它们的结果组合成一个新的结果。

示例:

CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 1);
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 2);

// 使用 allOf 等待两个任务完成
CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2);
allFutures.thenRun(() -> System.out.println("Both tasks completed using allOf"));

// 使用 thenCombine 组合两个任务的结果
CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (result1, result2) -> result1 + result2);
combinedFuture.thenAccept(sum -> System.out.println("Sum of both tasks: " + sum));

在这个例子中,allOf 用于等待 future1future2 都完成,但不关心它们的具体结果。而 thenCombine 用于等待这两个任务都完成,并将它们的结果相加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sky丶Mamba

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

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

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

打赏作者

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

抵扣说明:

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

余额充值