首页 > 其他分享 >CountDownLatch应用

CountDownLatch应用

时间:2025-01-10 09:29:22浏览次数:3  
标签:Thread 等待 线程 应用 CountDownLatch 操作 方法

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

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

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

标签:Thread,等待,线程,应用,CountDownLatch,操作,方法
From: https://blog.csdn.net/qq_31532979/article/details/145048363

相关文章

  • Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用
    全文链接:https://tecdat.cn/?p=38708原文出处:拓端数据部落公众号分析师:YulingFang信息时代的来临使得企业营销焦点从产品中心转向客户中心,客户关系管理成为企业的核心问题。客户关系管理的关键是客户分群,通过客户分群,区分无价值客户和高价值客户,同时更好的了解客户的特征,使企......
  • 全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(while循环应用)
    到目前为止,所有的训练题目中给出的输入数据个数是确定的,但是有时候输入数据个数不确定,这种情况下,需要不断读取数据直到没有新的输入数据为止,那么C++是如何判断出读到文件末尾(或者没有新的输入)了呢?在C++中使用"EOF"(endoffile)来实现,代表文件(file)或者标准输入(stdin)的结尾,读入语......
  • 2024年生成式AI技术实践进展和应用突破(附最佳实践资料)
    2024年生成式AI技术在多个领域取得了显著的实践进展和应用突破,以下是一些关键的实践案例和技术进展:视觉影像领域可灵AI:采用类Sora的“DiT”结构,以Transformer替代传统扩散模型中的U-Net,显著提升了视频生成的处理能力和效率。其核心优势在于能生成大幅度的合理运动、模拟物理......
  • 《软硬协同优化,解锁鸿蒙系统AI应用性能新高度》
    在当今数字化时代,鸿蒙系统与人工智能的融合正逐渐成为科技领域的热门话题。如何通过软件和硬件协同优化,进一步提升鸿蒙系统中AI应用的整体性能,成为了开发者和技术爱好者们关注的焦点。鸿蒙系统与AI应用的融合现状鸿蒙系统以其独特的微内核架构和分布式特性,为AI应用提供了......
  • Windows Sockets(Winsock) 是微软在 Windows 操作系统中提供的一组 API(应用程序接口),用于
    WindowsSockets(简称Winsock)是什么?WindowsSockets(Winsock)是微软在Windows操作系统中提供的一组API(应用程序接口),用于实现网络通信协议的标准。它是基于套接字(socket)模型的,允许开发者在Windows平台上通过网络进行通信。通过Winsock,程序可以进行各种网络操作,如建立TCP/IP......
  • Python代码实现了一个图像匹配系统的图形用户界面(GUI)应用程序
    importtkinterastkfromtkinterimportfiledialog,messagebox,ttkfromPILimportImage,ImageTkimportosimportcv2importmatplotlib.pyplotaspltimportnumpyasnpfromdatetimeimportdatetimeimportsysclassImageMatcherApp:def__init_......
  • Python 中的作用域:规则与应用
    在Python编程中,作用域(Scope)是指一个变量可以被访问和引用的范围。作用域与变量的生命周期密切相关,决定了变量何时被创建、何时被销毁以及在哪些地方可以使用它。理解作用域对于编写清晰、可维护的代码至关重要。Python中的作用域机制可以通过LEGB规则(Local,Enclosing,......
  • 【Mac实践Docker】使用Nginx部署Web应用
    Nginx部署Web应用学习资料参考一、安装Docker下载DockerDesktop:启动Docker:验证安装:macOS命令行工具Docker命令二、使用Nginx部署Web应用拉取Nginx镜像创建挂载目录创建容器并挂载目录创建并启动容器:复制配置文件到宿主机:删除容器并重新启动:重新启动容器并挂载目录:......
  • Echarts的实践应用:天气预报未来一周最高气温变化趋势折线图
    文章目录Echarts的使用步骤通过Day.js来获取未来七天的日期通过axios来进行网络请求获得未来一周的天气预报使用Echarts中的折线图进行展示效果展示Echarts的使用步骤下载并引入echarts.js文件这里我是通过CDN方式引入的如下:<scriptsrc="https://cdn.jsdelivr......
  • C# 类(Class)及其在 Unity 引擎开发中的应用总结
    1.什么是C#类?在C#中,类(Class)是一种用户定义的数据结构,用于封装一组数据(字段)和操作数据的方法。类是面向对象编程(OOP)的核心,它支持封装、继承和多态等特性。1.1类的基本结构一个类通常由以下部分组成:字段(Fields):存储数据或状态。属性(Properties):封装字段,提供安全的访......