面试题答案
一键面试CompletableFuture的handle方法作用
handle
方法用于对CompletableFuture
的结果进行处理,无论异步操作是正常完成还是出现异常。它接收一个BiFunction
作为参数,该函数的两个参数分别是异步操作的结果(如果成功)和抛出的异常(如果失败),返回值会被包装成一个新的CompletableFuture
。
代码示例
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureHandleExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture.supplyAsync(() -> {
// 模拟异步操作
if (Math.random() > 0.5) {
return "Success result";
} else {
throw new RuntimeException("Simulated exception");
}
})
.handle((result, ex) -> {
if (ex != null) {
System.out.println("Caught exception: " + ex.getMessage());
return "Default value due to exception";
} else {
System.out.println("Normal result: " + result);
return result;
}
})
.thenAccept(System.out::println);
// 主线程等待异步操作完成
Thread.sleep(2000);
}
}
在上述代码中:
CompletableFuture.supplyAsync
启动一个异步任务,该任务以50%的概率成功返回一个字符串,50%的概率抛出异常。handle
方法捕获异步任务可能出现的异常,并根据情况返回处理后的结果。如果出现异常,打印异常信息并返回默认值;如果没有异常,打印正常结果并返回该结果。thenAccept
用于消费handle
返回的新CompletableFuture
的结果并打印。Thread.sleep(2000)
用于主线程等待异步操作完成,以便观察输出结果。