在Java中,可以使用CountDownLatch来实现优雅地处理两个回调都结束后处理另外一个任务的功能。CountDownLatch是一个同步辅助类,它可以使一个或多个线程等待其他线程完成操作后再继续执行。

以下是一个示例代码:

import java.util.concurrent.CountDownLatch;

public class CallbackExample {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch latch = new CountDownLatch(2); // 创建一个CountDownLatch对象,参数为回调的数量

        // 第一个回调
        Callback callback1 = new Callback() {
            @Override
            public void onComplete() {
                System.out.println("Callback 1 complete");
                latch.countDown(); // 回调完成后调用countDown方法,减少latch的计数
            }
        };

        // 第二个回调
        Callback callback2 = new Callback() {
            @Override
            public void onComplete() {
                System.out.println("Callback 2 complete");
                latch.countDown(); // 回调完成后调用countDown方法,减少latch的计数
            }
        };

        // 执行回调
        performCallback(callback1);
        performCallback(callback2);

        // 等待两个回调都完成
        latch.await();

        // 两个回调都完成后执行其他任务
        System.out.println("Both callbacks complete. Do something else.");
    }

    // 模拟执行回调的方法
    private static void performCallback(Callback callback) {
        new Thread(() -> {
            // 模拟耗时操作
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            callback.onComplete(); // 回调完成
        }).start();
    }

    // 回调接口
    interface Callback {
        void onComplete();
    }
}

在上述代码中,使用CountDownLatch来等待两个回调都完成。每个回调完成时,都会调用CountDownLatch的countDown方法来减少latch的计数。在主线程中,调用latch.await()来等待latch的计数减为0,即两个回调都完成。当两个回调都完成后,就可以执行其他任务。

注意:在执行回调的方法performCallback中,使用了一个新的线程来模拟耗时操作,确保回调不会立即完成

如何优雅的写出两个回调都结束后处理另外一个任务java

原文地址: https://www.cveoy.top/t/topic/idMi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录