CompletableFuture

tim-qtp...大约 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(); // 执行下一步