CompletableFuture几个常用api
1. thenRun()
用途: 在前一个 CompletableFuture 完成后执行一个不返回结果的操作。
返回值: 返回一个新的 CompletableFuture。
适用场景: 当你只需要在异步操作完成后执行某个副作用(如打印日志、更新状态等)而不需要处理结果时。
示例:
java
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
// 执行某个计算
return 42;
}).thenRun(() -> {
// 计算完成后执行的操作
System.out.println(“计算完成”);
});
2. thenCompose()
用途: 用于将一个返回 CompletableFuture 的函数应用于前一个 CompletableFuture 的结果,并返回一个新的 CompletableFuture。
返回值: 返回一个新的 CompletableFuture,其中 T 是下一个异步任务的结果类型。
适用场景: 当你需要根据前一个任务的结果启动另一个异步任务时。
示例:
java
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
return 42;
}).thenCompose(result -> {
// 使用前一个结果启动另一个异步任务
return CompletableFuture.supplyAsync(() -> result + 1);
});
3. supplyAsync()
用途: 提供一个可以在新的线程中异步执行的任务,并返回一个 CompletableFuture。
返回值: 返回一个 CompletableFuture,其中 T 是任务的结果类型。
适用场景: 当你需要在新的线程中异步执行计算或 I/O 操作时。
示例:
java
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
// 在新的线程中执行某个计算
return 42;
});
4. runAsync()
用途: 提供一个可以在新的线程中异步执行的操作,但不返回结果。
返回值: 返回一个 CompletableFuture。
适用场景: 当你只需要异步执行某个操作,而不需要返回值时。
示例:
java
CompletableFuture future = CompletableFuture.runAsync(() -> {
// 在新的线程中执行某个操作
System.out.println(“异步执行中”);
});
总结对比
方法 返回值类型 说明 适用场景
thenRun() CompletableFuture 执行不返回结果的操作 仅需在前一个任务完成后执行副作用
thenCompose() CompletableFuture 将结果传递给返回 CompletableFuture 的函数 根据前一个结果启动另一个异步任务
supplyAsync() CompletableFuture 在新的线程中执行并返回结果 需要异步执行计算或 I/O 操作
runAsync() CompletableFuture 在新的线程中执行但不返回结果 仅需异步执行操作而不需返回值
这些方法可以灵活组合使用,以便在复杂的异步任务流中进行有效的控制和管理。