面试题答案
一键面试- 使用
CompletableFuture
并行执行异步任务并合并结果的原理:CompletableFuture
是Java 8引入的用于异步编程的类。通过CompletableFuture.supplyAsync
方法可以异步执行有返回值的任务。- 利用
thenCombine
方法可以在两个异步任务都完成后,将它们的结果进行合并。
- 代码示例:
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(() -> {
// 模拟一些计算
return calculateResult1();
});
// 第二个异步任务
CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
// 模拟一些计算
return calculateResult2();
});
// 两个任务都完成后合并结果
CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (result1, result2) -> {
// 合并结果的逻辑
return result1 + result2;
});
// 获取最终合并的结果
int finalResult = combinedFuture.get();
System.out.println("最终合并结果: " + finalResult);
}
private static int calculateResult1() {
// 模拟计算
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 10;
}
private static int calculateResult2() {
// 模拟计算
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 20;
}
}
在上述代码中:
CompletableFuture.supplyAsync
方法分别启动两个异步任务,calculateResult1
和calculateResult2
模拟了一些实际的计算工作。thenCombine
方法将两个异步任务的结果进行合并,这里简单地将两个结果相加。- 最后通过
get
方法获取最终合并的结果。
这种方式在分布式系统场景下很有用,例如可以并行调用多个微服务接口,并在它们都返回结果后进行统一处理。