MST

星途 面试题库

面试题:Java中CompletableFuture whenComplete的执行时机

在Java的CompletableFuture中,whenComplete方法在什么情况下会被执行?请举例说明其执行的时机和特点。
19.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. whenComplete方法执行情况
    • whenComplete方法会在CompletableFuture完成(无论是正常完成还是异常完成)时执行。
  2. 举例说明
import java.util.concurrent.CompletableFuture;

public class CompletableFutureExample {
    public static void main(String[] args) {
        CompletableFuture.supplyAsync(() -> {
            // 模拟一些计算
            if (Math.random() < 0.5) {
                throw new RuntimeException("模拟异常");
            }
            return "任务正常完成";
        }).whenComplete((result, ex) -> {
            if (ex == null) {
                System.out.println("任务正常完成,结果是: " + result);
            } else {
                System.out.println("任务异常完成,异常信息: " + ex.getMessage());
            }
        });
        // 防止主线程退出
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
  1. 执行时机和特点
    • 执行时机:在CompletableFuture代表的异步任务完成后,无论任务是正常返回结果还是抛出异常,whenComplete方法都会被执行。在上述例子中,supplyAsync方法创建了一个异步任务,当这个异步任务完成(不管是正常返回字符串还是抛出异常),whenComplete中的代码就会执行。
    • 特点
      • 不影响原任务执行whenComplete方法只是在任务完成后进行额外的处理,不会阻塞原异步任务的执行,也不会改变原任务的返回结果或异常状态。
      • 可以处理异常:通过whenComplete方法的第二个参数ex,可以在任务异常完成时获取到异常信息,从而进行相应的处理。在上述例子中,根据ex是否为null来判断任务是否正常完成,并输出不同的信息。