面试题答案
一键面试适用场景
- 日志记录:当一个异步任务完成后,记录任务执行完成的日志信息。例如在一个处理用户注册的异步任务完成后,记录注册成功的日志。
- 资源清理:异步任务可能会占用一些临时资源,任务完成后需要清理这些资源。比如异步下载文件完成后,关闭相关的文件流资源。
- 触发后续无关紧要任务:有一些不需要依赖异步任务结果的后续操作,例如发送站内信通知相关人员任务已完成,但站内信发送失败并不影响整体业务流程。
代码示例
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
方法指定的无返回值任务会被执行。