Java中CountDownLatch工具类详细解析

 更新时间:2023年11月16日 10:40:07   作者:tanxinji  
这篇文章主要介绍了Java中CountDownLatch工具类详细解析,创建CountDownLatch对象时,会传入一个count数值,该对象每次调用countDown()方法会使count -- ,就是count每次减1,需要的朋友可以参考下

Java中CountDownLatch工具类详细解析

创建CountDownLatch对象时,会传入一个count数值,该对象每次调用countDown()方法会使count -- ,就是count每次减1; 调用await()方法,程序会阻塞等待,当count被减到0了之后,await()后面的程序解除阻塞,可以继续运行。 阻塞的是调用await()方法的后续代码,调用countDown()方法count自减1,当count=0 时解除阻塞。 如:

CountDownLatch countDownLatch = new CountDownLatch(4); //初始 count = 4
countDownLatch.countDown(); // count = 4 -1;
countDownLatch.countDown();  // count = 3-1;
countDownLatch.await(); //当count =0 ,可以执行后续代码

代码示例1: 当count不为0时,程序会一直等待。

import java.util.concurrent.CountDownLatch;

public class Test {

    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(5);

        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"已运行!");
                countDownLatch.countDown();
            }
        }).start();

        countDownLatch.await();
        System.out.println(" 程序执行完毕! ");
    }
}

在这里插入图片描述

代码示例2:count=0解除阻塞。

import java.util.concurrent.CountDownLatch;

public class Test1 {

    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(5);
        for(int i = 0 ; i < 5 ; i++){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName()+"已运行!");
                    countDownLatch.countDown();
                }
            }).start();
        }


        countDownLatch.await();
        System.out.println(" 程序执行完毕! ");
    }
}

在这里插入图片描述

到此这篇关于Java中CountDownLatch工具类详细解析的文章就介绍到这了,更多相关CountDownLatch工具类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis-Plus使用动态表名分表查询的实现

    MyBatis-Plus使用动态表名分表查询的实现

    本文主要介绍了MyBatis-Plus使用动态表名分表查询,主要是动态修改表名的几种常见场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • 关于SpringBoot中的XA事务详解

    关于SpringBoot中的XA事务详解

    这篇文章主要介绍了关于SpringBoot中的XA事务详解,事务管理可以确保数据的一致性和完整性,同时也可以避免数据丢失和冲突等问题。在分布式环境中,XA 事务是一种常用的事务管理方式,需要的朋友可以参考下
    2023-07-07
  • 快速了解Java中NIO核心组件

    快速了解Java中NIO核心组件

    这篇文章主要介绍了快速了解Java中NIO核心组件,涉及相关介绍及完整实例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 详解spring切面使用传递给被通知方法的参数

    详解spring切面使用传递给被通知方法的参数

    本篇文章主要介绍了详解spring切面使用传递给被通知方法的参数,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Java将RTF转换为PDF格式的实现

    Java将RTF转换为PDF格式的实现

    本文主要介绍了Java将RTF转换为PDF格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 关于webLucene 安装方法

    关于webLucene 安装方法

    webLucene是一个基于开源项目lucene实现站内搜索的工具,关于它的安装,百度得到的大多是一样的,按照步骤也能正确安装并运行,需要注意的问题是
    2009-06-06
  • 通过实例学习Either 树和模式匹配

    通过实例学习Either 树和模式匹配

    这篇文章主要介绍了通过实例学习Either 树和模式匹配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • SpringBoot异常处理机制使用详解

    SpringBoot异常处理机制使用详解

    SpringBoot异常处理基于Servlet与Spring框架,通过ErrorAttributes、ErrorViewResolver、BasicErrorController协作实现统一异常响应,企业级应用需标准化异常体系,统一响应格式,优化性能与安全,如隐藏堆栈信息,确保日志上下文
    2025-08-08
  • jOOQ串联字符串拒绝使用的原因实例

    jOOQ串联字符串拒绝使用的原因实例

    这篇文章主要为大家介绍了jOOQ串联字符串拒绝使用的原因实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • JAVA中的函数接口示例详解

    JAVA中的函数接口示例详解

    创建一个自定义的Sayable接口,这是一个使用@FunctionalInterface注解的函数式接口,这篇文章主要介绍了JAVA中的函数接口,你都用过吗,需要的朋友可以参考下
    2023-11-11

最新评论