MST

星途 面试题库

面试题:Java中CompletableFuture的anyOf方法使用场景及示例

请阐述在Java中CompletableFuture的anyOf方法适用于哪些场景,并通过代码示例展示如何使用该方法快速获取首个完成任务的结果。代码要求清晰展示任务的创建、anyOf方法的调用以及结果的处理。
45.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

CompletableFuture的anyOf方法适用场景

anyOf方法适用于当多个异步任务并行执行,我们只关心其中任意一个任务最先完成的结果的场景。例如,在进行多个数据源查询时,只要其中一个数据源成功返回数据,就可以停止其他查询,这样可以提高效率,减少不必要的资源消耗。

代码示例

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class CompletableFutureAnyOfExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 创建多个异步任务
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(2000); // 模拟任务执行耗时
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Result from Future 1";
        });

        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(1000); // 模拟任务执行耗时
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Result from Future 2";
        });

        CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(3000); // 模拟任务执行耗时
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Result from Future 3";
        });

        // 使用anyOf方法获取最先完成的任务的结果
        CompletableFuture<Object> anyOfFuture = CompletableFuture.anyOf(future1, future2, future3);

        // 处理结果
        Object result = anyOfFuture.get();
        System.out.println("First completed task result: " + result);
    }
}

在上述代码中:

  1. 创建了三个异步任务future1future2future3,每个任务通过CompletableFuture.supplyAsync方法异步执行,并模拟了不同的执行耗时。
  2. 使用CompletableFuture.anyOf方法传入这三个任务,返回一个新的CompletableFuture,这个新的CompletableFuture会在任意一个传入的任务完成时完成。
  3. 通过调用get方法获取最先完成任务的结果,并打印输出。