MST

星途 面试题库

面试题:Java中CompletableFuture thenCombine的中等难度面试题

请用Java代码示例展示如何使用CompletableFuture的thenCombine方法将两个异步任务的结果进行组合。假设第一个异步任务返回一个整数,第二个异步任务返回一个字符串,组合后的结果为拼接后的字符串,如整数1和字符串'abc'组合后为'1abc'。同时,请解释thenCombine方法的参数含义以及其执行的原理。
41.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class CompletableFutureExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 1);
        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "abc");

        CompletableFuture<String> combinedFuture = future1.thenCombine(future2, (integer, string) -> integer + string);

        String result = combinedFuture.get();
        System.out.println(result);
    }
}

thenCombine方法参数含义

  • 第一个参数是另一个CompletableFuture,这里是future2,它代表另一个异步任务。
  • 第二个参数是一个BiFunction,在这里是(integer, string) -> integer + string,这个BiFunction接收两个异步任务的结果作为参数(第一个异步任务的结果integer,第二个异步任务的结果string),并返回组合后的结果。

thenCombine方法执行原理

  1. future1future2这两个异步任务并行执行。
  2. future1future2都完成时,thenCombine方法会被触发。
  3. thenCombine方法将future1future2的结果作为参数传递给BiFunctionBiFunction对这两个结果进行处理并返回一个新的结果。
  4. 这个新的结果会被包装成一个新的CompletableFuture(即combinedFuture),如果需要获取这个最终结果,可以调用get方法。如果其中任何一个CompletableFuture执行失败,combinedFuture也会以失败状态完成。