面试题答案
一键面试-
其他任务的情况:
CompletableFuture.anyOf
方法会返回一个新的CompletableFuture
,当其中任何一个CompletableFuture
完成(正常完成或抛出异常)时,这个新的CompletableFuture
就会完成。- 其他任务不会因为其中一个任务抛出异常而被取消或中断,它们会继续执行。
-
正确处理异常情况:
- 可以通过
exceptionally
方法来处理异常,确保整个任务执行流程的稳定性和正确性。
- 可以通过
以下是代码示例:
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureAnyOfExample {
public static void main(String[] args) {
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
if (Math.random() > 0.5) {
throw new RuntimeException("Task 1 failed");
}
return "Result of Task 1";
});
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
if (Math.random() > 0.5) {
throw new RuntimeException("Task 2 failed");
}
return "Result of Task 2";
});
CompletableFuture<Object> anyOfFuture = CompletableFuture.anyOf(future1, future2);
anyOfFuture.thenApply(result -> {
System.out.println("Task completed successfully: " + result);
return result;
}).exceptionally(ex -> {
System.out.println("An exception occurred: " + ex.getMessage());
return null;
}).join();
}
}
在上述代码中:
- 创建了两个
CompletableFuture
,future1
和future2
,它们模拟了可能会抛出异常的任务。 - 使用
CompletableFuture.anyOf
方法将这两个任务组合起来。 - 通过
thenApply
方法处理任务正常完成的情况,通过exceptionally
方法处理任务抛出异常的情况。这样无论任务是正常完成还是抛出异常,整个流程都能稳定运行并正确处理结果或异常。