异步编排如何准确的在异步线程全部结束后继续进行非异步的代码?

异步编排如何准确的在异步线程全部结束后继续进行非异步的代码?

img


如上代码我在allof获取结果之后(虽然这块代码没结果,但是有有结果的地方)还想继续根据结果不再用异步编排处理而是用普通的线程逻辑进行处理该怎么做?

引用 皆我百晓生 小程序回复内容作答:
在异步编排中,可以使用CompletableFuture的join()方法来等待异步线程全部结束,然后继续执行非异步的代码。join()方法会阻塞当前线程,直到所有的异步线程都执行完毕。

在上述代码中,可以在CompletableFuture.allOf()之后使用join()方法阻塞当前线程,等待所有的异步任务执行完毕。然后根据需要处理结果,可以通过isCancelled()、isCompletedExceptionally()、isCompletedNormally()等方法来判断异步任务的执行状态。

下面是修改后的代码示例:

public class AsyncExample {

    public static void main(String[] args) {
        CompletableFuture<Void> future1 = asyncMethod1();
        CompletableFuture<Void> future2 = asyncMethod2();
        CompletableFuture<Void> future3 = asyncMethod3();

        CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2, future3);

        allFutures.join(); // 等待所有的异步任务执行完毕
        
        // 异步任务执行完毕后,继续执行非异步的代码逻辑
        if (!future1.isCompletedExceptionally() && !future2.isCompletedExceptionally() && !future3.isCompletedExceptionally()) {
            // 执行非异步的代码逻辑
            System.out.println("All async tasks completed successfully!");
        } else {
            System.out.println("Some async tasks failed!");
            // 处理异步任务失败的情况
        }
    }

    public static CompletableFuture<Void> asyncMethod1() {
        return CompletableFuture.runAsync(() -> {
            // 异步任务1的逻辑
        });
    }

    public static CompletableFuture<Void> asyncMethod2() {
        return CompletableFuture.runAsync(() -> {
            // 异步任务2的逻辑
        });
    }

    public static CompletableFuture<Void> asyncMethod3() {
        return CompletableFuture.runAsync(() -> {
            // 异步任务3的逻辑
        });
    }
}

在上述代码中,使用CompletableFuture.allOf()方法将所有的异步任务组合成一个CompletableFuture,然后使用join()方法等待所有的异步任务执行完毕。根据异步任务的执行状态,可以继续执行相应的处理逻辑。

【以下回答由 GPT 生成】

我很抱歉,但问题是空的,我无法提供任何解决方案。请提供一个具体的问题,我将尽力为您提供帮助。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^