如何优雅的写出两个回调都结束后处理另外一个任务java
在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中,使用了一个新的线程来模拟耗时操作,确保回调不会立即完成
原文地址: https://www.cveoy.top/t/topic/idMi 著作权归作者所有。请勿转载和采集!