编写一个示例程序,展示如何使用 CountDownLatch 类进行多线程同步和协作。

给出一个简单的 CountDownLatch 的使用示例,假设我们有一个应用场景:主线程需要等待两个子线程都完成工作后再继续执行。

这是一个简单的代码示例:

import java.util.concurrent.CountDownLatch;

public class CountDownLatchDemo {

    public static void main(String[] args) throws InterruptedException {
        // 创建一个 CountDownLatch 实例,初始计数为 2
        CountDownLatch latch = new CountDownLatch(2);

        // 创建并启动第一个子线程
        new Thread(() -> {
            try {
                Thread.sleep(1000);  // 模拟耗时操作
                System.out.println("子线程" + Thread.currentThread().getName() + "执行完毕");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                latch.countDown(); // 计数减 1
            }
        }).start();

        // 创建并启动第二个子线程
        new Thread(() -> {
            try {
                Thread.sleep(2000);  // 模拟耗时操作
                System.out.println("子线程" + Thread.currentThread().getName() + "执行完毕");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                latch.countDown(); // 计数减 1
            }
        }).start();

        System.out.println("等待两个子线程执行完毕...");
        latch.await();  // 等待 latch 计数减为 0
        System.out.println("两个子线程都已经执行完毕");
        System.out.println("继续主线程执行...");
    }
}

在这个示例中,主线程创建了一个初始计数为 2 的 CountDownLatch。然后创建了两个子线程,每个子线程完成工作后会将 CountDownLatch 的计数减 1。主线程调用 latch.await(),等待 CountDownLatch 的计数减为 0,然后继续执行。

发表评论

后才能评论