MST
星途 面试题库

面试题:Java 中 CompletableFuture 的 thenRun 方法应用场景

请描述在哪些实际业务场景中,你会选择使用 Java 中 CompletableFuture 的 thenRun 方法?并给出一个简单的代码示例,展示该方法如何在一个异步任务完成后执行一个无返回值的后续任务。
48.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

适用场景

  1. 日志记录:当一个异步任务完成后,记录任务执行完成的日志信息。例如在一个处理用户注册的异步任务完成后,记录注册成功的日志。
  2. 资源清理:异步任务可能会占用一些临时资源,任务完成后需要清理这些资源。比如异步下载文件完成后,关闭相关的文件流资源。
  3. 触发后续无关紧要任务:有一些不需要依赖异步任务结果的后续操作,例如发送站内信通知相关人员任务已完成,但站内信发送失败并不影响整体业务流程。

代码示例

import java.util.concurrent.CompletableFuture;

public class CompletableFutureThenRunExample {
    public static void main(String[] args) {
        CompletableFuture.supplyAsync(() -> {
            // 模拟异步任务
            System.out.println("异步任务开始执行");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "任务执行结果";
        }).thenRun(() -> {
            System.out.println("异步任务完成,执行后续无返回值任务");
        });

        // 防止主线程退出
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

在上述代码中,supplyAsync 方法启动一个异步任务,在这个任务完成后,thenRun 方法指定的无返回值任务会被执行。