面试题答案
一键面试思路
- 任务并行执行:使用
CompletableFuture
的静态方法(如CompletableFuture.allOf
)并行执行多个任务。 - 异常捕获:为每个
CompletableFuture
任务添加exceptionally
方法来捕获任务执行过程中的异常,确保异常不会中断其他任务。 - 异常处理:在
exceptionally
方法中定义异常处理逻辑,比如记录日志、返回默认值等。
代码实现
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExceptionHandling {
public static void main(String[] args) {
CompletableFuture<String> task1 = CompletableFuture.supplyAsync(() -> {
// 模拟正常任务
return "Task 1 completed";
});
CompletableFuture<String> task2 = CompletableFuture.supplyAsync(() -> {
// 模拟抛出异常的任务
throw new RuntimeException("Task 2 failed");
});
CompletableFuture<String> task3 = CompletableFuture.supplyAsync(() -> {
// 模拟正常任务
return "Task 3 completed";
});
CompletableFuture<Void> allTasks = CompletableFuture.allOf(task1, task2, task3);
allTasks.join(); // 等待所有任务完成
try {
System.out.println(task1.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
try {
System.out.println(task2.exceptionally(ex -> {
System.out.println("Caught exception in task2: " + ex.getMessage());
return "Default value for task2";
}).get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
try {
System.out.println(task3.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
在上述代码中:
- 任务创建:
task1
、task2
和task3
是三个并行执行的任务,其中task2
会抛出异常。 - 并行执行:
CompletableFuture.allOf
方法用于并行执行这三个任务。 - 异常捕获与处理:
task2
使用exceptionally
方法捕获异常,并返回一个默认值,确保即使task2
出现异常,程序仍能继续执行并处理其他任务的结果。