在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."。

这种写法能够优雅地实现等待两个事件结束的功能,而不需要使用繁琐的线程同步手段

如何优雅的写出等待两个事件结束java

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

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