import java.util.concurrent.CompletableFuture;
public class AsyncTaskSequence {
public static void main(String[] args) {
CompletableFuture.supplyAsync(() -> {
// 任务A:返回一个字符串
System.out.println("任务A执行中...");
return "10";
})
.thenApplyAsync(str -> {
// 任务B:接收任务A的返回值并进行数字计算
System.out.println("任务B执行中...");
int num = Integer.parseInt(str);
return num * 2;
})
.thenApplyAsync(result -> {
// 任务C:接收任务B的计算结果进行字符串拼接
System.out.println("任务C执行中...");
return "计算结果是: " + result;
})
.thenAccept(System.out::println)
.exceptionally(ex -> {
ex.printStackTrace();
return null;
});
}
}
关键方法及其作用
- supplyAsync(Supplier supplier):创建一个异步任务,该任务返回一个结果。
Supplier
接口定义了一个无参数的方法 get()
,用于生成任务的返回值。在上述代码中,任务A通过 supplyAsync
异步执行并返回一个字符串。
- thenApplyAsync(Function<? super U,? extends V> fn):接收前一个
CompletableFuture
的结果,并将其作为参数传递给 Function
接口的 apply
方法进行处理,返回一个新的 CompletableFuture
。这里任务B和任务C分别使用 thenApplyAsync
接收前一个任务的结果并进行相应处理。
- thenAccept(Consumer<? super T> action):接收前一个
CompletableFuture
的结果,并将其传递给 Consumer
接口的 accept
方法进行处理,但不返回新的结果。这里用于打印任务C的最终结果。
- exceptionally(Function<Throwable,? extends T> fn):处理
CompletableFuture
执行过程中抛出的异常。如果任务执行过程中出现异常,exceptionally
中的 Function
会被调用,fn
参数为捕获到的异常对象。可以在该方法中进行异常处理并返回一个默认值或进行其他操作。