MST

星途 面试题库

面试题:Java 中如何使用 CompletableFuture 实现多个任务的 AND 组合关系

请描述在 Java 中使用 CompletableFuture 实现多个任务以 AND 组合关系执行的基本步骤,并给出一个简单示例代码,假设有两个任务 task1 和 task2,都返回字符串结果,在两个任务都成功完成后,将它们的结果拼接并返回。
34.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 基本步骤
    • 创建 CompletableFuture 实例来表示任务 task1task2。这可以通过 CompletableFuture.supplyAsync 方法,将实际的任务逻辑作为参数传递进去,这些任务会异步执行。
    • 使用 thenCombine 方法将两个 CompletableFuture 实例组合起来。thenCombine 方法接收另一个 CompletableFuture 和一个 BiFunctionBiFunction 用于处理两个任务的结果,在这里就是将两个字符串结果拼接起来。
    • 可以通过调用 join 方法获取最终的拼接结果。在实际应用中,也可以使用 thenApply 等方法进行进一步的处理而不是直接获取结果。
  2. 示例代码
import java.util.concurrent.CompletableFuture;

public class CompletableFutureAndExample {
    public static void main(String[] args) {
        CompletableFuture<String> task1 = CompletableFuture.supplyAsync(() -> {
            // 模拟任务1的执行
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Result of task1";
        });

        CompletableFuture<String> task2 = CompletableFuture.supplyAsync(() -> {
            // 模拟任务2的执行
            try {
                Thread.sleep(1500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Result of task2";
        });

        CompletableFuture<String> combinedFuture = task1.thenCombine(task2, (result1, result2) -> result1 + " " + result2);

        String finalResult = combinedFuture.join();
        System.out.println(finalResult);
    }
}