CompletableFuture
...大约 1 分钟Java基础
CompletableFuture
是 Java 8 引入的一个强大的异步编程工具,可以用来实现复杂的异步任务处理。
如果你需要执行一批定时任务,并且希望所有任务都执行完毕后再进行下一步操作,可以通过 CompletableFuture
的组合方法来实现。
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
public class CompletableFutureExample {
public static void main(String[] args) {
// 创建异步任务
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> task1());
CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> task2());
CompletableFuture<Void> future3 = CompletableFuture.runAsync(() -> task3());
// 组合所有任务
CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2, future3);
// 等待所有任务完成
allFutures.join(); // 阻塞等待所有任务完成
// 执行下一步操作
nextStep(); // 所有任务完成后执行
}
// 模拟任务 1
private static void task1() {
System.out.println("Task 1 started by " + Thread.currentThread().getName());
sleep(1); // 模拟耗时操作
System.out.println("Task 1 completed");
}
// 模拟任务 2
private static void task2() {
System.out.println("Task 2 started by " + Thread.currentThread().getName());
sleep(2); // 模拟耗时操作
System.out.println("Task 2 completed");
}
// 模拟任务 3
private static void task3() {
System.out.println("Task 3 started by " + Thread.currentThread().getName());
sleep(3); // 模拟耗时操作
System.out.println("Task 3 completed");
}
// 模拟后续操作
private static void nextStep() {
System.out.println("All tasks completed. Proceeding to next step.");
}
// 模拟耗时操作
private static void sleep(int seconds) {
try {
TimeUnit.SECONDS.sleep(seconds);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
如果不需要返回值,CompletableFuture.runAsync()
是一个简洁的方法
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> task1());
CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> task2());
CompletableFuture<Void> future3 = CompletableFuture.runAsync(() -> task3());
CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2, future3);
allFutures.join(); // 等待所有任务完成
nextStep(); // 执行下一步