首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CountDownLatch应用

CountDownLatch应用

作者头像
贺公子之数据科学与艺术
发布2025-08-29 18:58:00
发布2025-08-29 18:58:00
7300
代码可运行
举报
运行总次数:0
代码可运行

使用CountDownLatch可以实现一种等待/通知机制,但它与对象锁(synchronized)的用途和行为有所不同。CountDownLatch主要用于使一个或多个线程等待其他线程完成一系列操作。当你提到“方法A调用时,对象锁锁着,方法B等待释放”,这通常是指通过synchronized块或方法来实现的互斥访问。

不过,如果你想要利用CountDownLatch来实现一种类似的效果,即让方法B等待方法A完成某个操作后再执行,那么可以这样使用CountDownLatch

代码语言:javascript
代码运行次数:0
运行
复制
public class Example {
    // 定义锁对象
    private final CountDownLatch latch = new CountDownLatch(1);

    // 方法A
    public void methodA() {
        try {
            // 执行一些操作
            System.out.println("Method A is running.");
            // 假设这里有一些耗时操作
            Thread.sleep(2000); // 模拟耗时操作
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        } finally {
            // 通知等待的线程,方法A已经完成相关操作
            latch.countDown();
        }
    }

    // 方法B
    public void methodB() {
        try {
            // 等待方法A完成操作
            latch.await();
            // 方法A完成操作后,继续执行方法B的后续操作
            System.out.println("Method B is running after method A.");
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }

    public static void main(String[] args) {
        Example example = new Example();

        // 创建线程A,执行方法A
        Thread threadA = new Thread(() -> {
            example.methodA();
        });

        // 创建线程B,执行方法B
        Thread threadB = new Thread(() -> {
            example.methodB();
        });

        // 启动线程B和线程A
        threadB.start();
        threadA.start();
    }
}

在这个示例中,CountDownLatch被初始化为1,表示有一个计数器需要被减到0。方法A在完成其操作后调用countDown()方法,将计数器减1。方法B在执行时调用await()方法,这将导致方法B所在的线程等待,直到计数器被减到0。这样,方法B就会等待方法A完成操作后再继续执行。

CountDownLatch是一次性的,一旦计数器减到0,它就不能再次使用。如果你需要多次使用类似的等待/通知机制,可能需要考虑其他工具,如CyclicBarrierSemaphore

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档