java线程并发countdownlatch类使用示例



import java.util.concurrent.CountDownLatch;

public class CountDownLatchExample {
    public static void main(String[] args) throws InterruptedException {
        // 初始化一个CountDownLatch,设置计数器为2
        CountDownLatch latch = new CountDownLatch(2);

        // 创建并启动两个线程
        Thread thread1 = new Thread(() -> {
            System.out.println("线程1正在执行任务...");
            // 模拟任务执行
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程1任务执行完毕");
            // 线程1任务完成,计数器减1
            latch.countDown();
        });

        Thread thread2 = new Thread(() -> {
            System.out.println("线程2正在执行任务...");
            // 模拟任务执行
            try {
                Thread.sleep(1500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程2任务执行完毕");
            // 线程2任务完成,计数器减1
            latch.countDown();
        });

        // 启动线程
        thread1.start();
        thread2.start();

        // 主线程等待,直到计数器为0
        System.out.println("等待所有线程完成任务...");
        latch.await(); // 阻塞当前线程,直到latch的计数器为0
        System.out.println("所有线程任务完成");
    }
}

在这个示例中,我们使用了`CountDownLatch`类来等待两个线程完成任务。我们创建了一个`CountDownLatch`实例,并将计数器初始化为2。然后,我们创建了两个线程,每个线程在执行完任务后都会调用`countDown()`方法来将计数器减1。主线程在调用`latch.await()`后会被阻塞,直到计数器的值变为0,即两个线程都完成了它们的任务。