面试题答案
一键面试实际应用场景
- 批处理任务:例如,在一个电商系统中,需要同时处理多个订单的发货操作、库存更新等任务。这些任务相互独立,但需要全部完成才能确定整个业务流程结束。
- 数据聚合:从多个不同数据源(如不同的数据库表、不同的API接口)获取数据,获取数据的操作是异步的,当所有数据都获取完成后,再进行数据的整合和分析。
- 并行计算:在科学计算领域,对一组数据进行多个不同的并行计算任务,当所有计算任务完成后,汇总结果。
代码示例
import java.util.concurrent.CompletableFuture;
public class CompletableFutureAllOfExample {
public static void main(String[] args) {
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> {
try {
Thread.sleep(2000);
System.out.println("Task 1 completed");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> {
try {
Thread.sleep(1000);
System.out.println("Task 2 completed");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2);
allFutures.thenRun(() -> System.out.println("All tasks completed")).join();
}
}
在上述代码中,CompletableFuture.runAsync
方法创建了两个异步任务 future1
和 future2
。CompletableFuture.allOf
方法接受多个 CompletableFuture
实例作为参数,并返回一个新的 CompletableFuture<Void>
,这个新的 CompletableFuture
在所有传入的 CompletableFuture
都完成时才会完成。最后通过 thenRun
方法添加一个回调,在所有任务完成后打印 "All tasks completed"。