如何优雅的写出等待两个事件结束java
在Java中,可以使用CountDownLatch类来实现等待两个事件结束的优雅写法。CountDownLatch是一个同步辅助类,它可以使一个或多个线程等待其他线程完成操作。
以下是使用CountDownLatch实现等待两个事件结束的代码示例:
import java.util.concurrent.CountDownLatch;
public class WaitTwoEvents {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(2); // 创建一个CountDownLatch对象,计数器初始值为2
Thread event1 = new Thread(new Event(latch, "Event 1")); // 创建第一个事件的线程
Thread event2 = new Thread(new Event(latch, "Event 2")); // 创建第二个事件的线程
event1.start(); // 启动第一个事件的线程
event2.start(); // 启动第二个事件的线程
latch.await(); // 等待计数器变为0,即两个事件都结束
System.out.println("Both events have finished.");
}
}
class Event implements Runnable {
private CountDownLatch latch;
private String name;
public Event(CountDownLatch latch, String name) {
this.latch = latch;
this.name = name;
}
@Override
public void run() {
try {
// 模拟事件执行过程
Thread.sleep((long) (Math.random() * 5000));
System.out.println(name + " has finished.");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
latch.countDown(); // 事件执行完毕后,计数器减1
}
}
}
在上述代码中,我们创建了一个CountDownLatch对象,初始计数器值为2,表示要等待两个事件完成。每个事件使用一个线程来执行,当事件执行完毕后,调用CountDownLatch的countDown()方法将计数器减1。主线程调用CountDownLatch的await()方法等待计数器变为0,即两个事件都完成后,输出"Both events have finished."。
这种写法能够优雅地实现等待两个事件结束的功能,而不需要使用繁琐的线程同步手段
原文地址: http://www.cveoy.top/t/topic/idMW 著作权归作者所有。请勿转载和采集!