面试题答案
一键面试适用业务场景
- 后台任务执行:当有一些不需要返回结果,且对主线程执行流程没有阻塞要求的任务,比如日志记录、数据统计等。例如,在一个电商系统中,每次用户下单成功后,需要记录一条下单成功的日志,这个记录日志的操作不需要返回值,也不影响下单成功的主线程响应,可以使用
runAsync
方法。 - 并行处理:在一些业务逻辑中,有多个独立的、无返回值的任务需要同时执行,以提高整体处理效率。比如在处理用户注册逻辑时,除了创建用户基本信息,还需要同时给用户发送欢迎邮件和初始化一些默认配置,这些操作相互独立且无返回值,可采用
runAsync
方法并行处理。
示例代码
import java.util.concurrent.CompletableFuture;
public class CompletableFutureExample {
public static void main(String[] args) {
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
// 模拟一个无返回值的异步任务
System.out.println("异步任务开始执行");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("异步任务执行结束");
});
// 主线程继续执行其他任务
System.out.println("主线程继续执行");
// 等待异步任务完成(这里只是为了演示,实际业务中可能不需要主线程等待)
future.join();
}
}
在上述代码中,CompletableFuture.runAsync
方法接收一个Runnable
接口的实现,该实现中的代码块就是异步执行的内容。主线程不会等待异步任务完成,而是继续执行后续代码,异步任务执行完毕后会打印相应的日志。future.join()
用于等待异步任务执行结束,实际业务中可根据需求决定是否需要主线程等待异步任务完成。