MST

星途 面试题库

面试题:Java中CompletableFuture的AllOf关系应用场景

请描述在Java中CompletableFuture的AllOf关系适用于哪些实际应用场景,并给出一个简单的代码示例,展示如何使用CompletableFuture.allOf() 方法来等待多个异步任务全部完成。
40.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

实际应用场景

  1. 批处理任务:例如,在一个电商系统中,需要同时处理多个订单的发货操作、库存更新等任务。这些任务相互独立,但需要全部完成才能确定整个业务流程结束。
  2. 数据聚合:从多个不同数据源(如不同的数据库表、不同的API接口)获取数据,获取数据的操作是异步的,当所有数据都获取完成后,再进行数据的整合和分析。
  3. 并行计算:在科学计算领域,对一组数据进行多个不同的并行计算任务,当所有计算任务完成后,汇总结果。

代码示例

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 方法创建了两个异步任务 future1future2CompletableFuture.allOf 方法接受多个 CompletableFuture 实例作为参数,并返回一个新的 CompletableFuture<Void>,这个新的 CompletableFuture 在所有传入的 CompletableFuture 都完成时才会完成。最后通过 thenRun 方法添加一个回调,在所有任务完成后打印 "All tasks completed"。