如何并行调用多个服务
使用 completablefuture.supplyasync() 将每个服务调用包装为异步任务,并通过 completablefuture.allof() 等待所有任务完成。这种方式利用 forkjoinpool 实现真正的并行执行,显著降低总耗时。

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ParallelCallExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(3);
CompletableFuture<String> futureA = CompletableFuture.supplyAsync(() -> callServiceA(), executor);
CompletableFuture<String> futureB = CompletableFuture.supplyAsync(() -> callServiceB(), executor);
CompletableFuture<String> futureC = CompletableFuture.supplyAsync(() -> callServiceC(), executor);
CompletableFuture.allOf(futureA, futureB, futureC).join();
System.out.println("Result A: " + futureA.join());
System.out.println("Result B: " + futureB.join());
System.out.println("Result C: " + futureC.join());
executor.shutdown();
}
private static String callServiceA() { return "Data A"; }
private static String callServiceB() { return "Data B"; }
private static String callServiceC() { return "Data C"; }
}如何处理单个服务调用的异常
在 supplyAsync 的 lambda 表达式中捕获异常,或使用 exceptionally() 方法提供默认值或错误处理逻辑。这能防止一个服务的失败导致整个并行流程中断。

掌握 ES6+ 特性,包括 async/await、解构、扩展运算符、箭头函数、Promise、模块、迭代器、生成器以及函数式编程模式,编写简洁高效的 Java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExceptionHandlingExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(3);
CompletableFuture<String> futureA = CompletableFuture.supplyAsync(() -> callServiceA(), executor)
.exceptionally(ex -> "Error in A: " + ex.getMessage());
CompletableFuture<String> futureB = CompletableFuture.supplyAsync(() -> callServiceB(), executor)
.exceptionally(ex -> "Error in B: " + ex.getMessage());
CompletableFuture.allOf(futureA, futureB).join();
System.out.println("Result A: " + futureA.join());
System.out.println("Result B: " + futureB.join());
executor.shutdown();
}
private static String callServiceA() { throw new RuntimeException("Simulated failure"); }
private static String callServiceB() { return "Data B"; }
}基于程序中某个输入、条件或结果的具体问题
当并行调用的服务数量动态变化时,可以使用 CompletableFuture 列表收集所有任务,然后统一调用 allOf()。这种方法适用于需要根据配置或数据库查询结果决定调用哪些服务的场景。
立即学习“Java免费学习笔记(深入)”;

















