面试题答案
一键面试代码示例
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 创建一个异步任务
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
// 模拟耗时操作
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 42;
});
// 获取异步任务的执行结果
Integer result = future.get();
System.out.println("异步任务执行结果: " + result);
}
}
关键步骤解释
- 创建异步任务:
- 使用
CompletableFuture.supplyAsync
方法创建一个异步任务。该方法接受一个Supplier
作为参数,在Supplier
的get
方法中编写需要异步执行的代码逻辑。这里通过() -> {... }
的Lambda表达式定义了一个Supplier
,在其中模拟了一个耗时2秒的操作,并返回结果42
。
- 使用
- 获取执行结果:
- 使用
future.get()
方法来获取异步任务的执行结果。这个方法会阻塞当前线程,直到异步任务执行完成并返回结果。如果异步任务执行过程中抛出异常,get()
方法会将该异常包装成ExecutionException
或InterruptedException
重新抛出,所以在使用get()
方法时需要处理这两种异常。
- 使用
此外,CompletableFuture还提供了许多其他方法来处理异步任务的结果、链式调用、异常处理等,以满足更复杂的异步编程需求。