iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >CountDownLatch详解以及用法示例
  • 541
分享到

CountDownLatch详解以及用法示例

java 2023-09-11 16:09:00 541人浏览 泡泡鱼
摘要

一、什么是countDownlatch CountDownLatch是一个同步工具类,它通过一个计数器来实现的,初始值为线程的数量。每当一个线程完成了自己的任务,计数器的值就相应得减1。当计数器到达0

一、什么是countDownlatch

CountDownLatch是一个同步工具类,它通过一个计数器来实现的,初始值为线程的数量。每当一个线程完成了自己的任务,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已执行完毕,然后在等待的线程就可以恢复执行任务。

二、方法详解

  1. CountDownLatch(int count):count为计数器的初始值(一般需要多少个线程执行,count就设为几)。
  2. countDown(): 每调用一次计数器值-1,直到count被减为0,代表所有线程全部执行完毕。
  3. getCount():获取当前计数器的值。
  4. await(): 等待计数器变为0,即等待所有异步线程执行完毕。
  5. boolean await(long timeout, TimeUnit unit): 此方法与await()区别:
    ①此方法至多会等待指定的时间,超时后会自动唤醒,若 timeout 小于等于零,则不会等待
    ②boolean 类型返回值:若计数器变为零了,则返回 true;若指定的等待时间过去了,则返回 false

三、CountDownLatch应用场景

1. 某个线程需要在其他n个线程执行完毕后再向下执行2. 多个线程并行执行同一个任务,提高响应速度

四、CountDownLatch代码示例

public class CountDownLaunchTest {    public static void main(String[] args) throws InterruptedException {        List list = new ArrayList();        for(int i = 1; i<=100; i++){            list.add(i);        }        Long start = System.currentTimeMillis();        for(int i = 0; i<list.size(); i++){            Thread.sleep(100);        }        System.out.println("=====同步执行:耗时"+(System.currentTimeMillis()-start)+"毫秒======");        Long start1 = System.currentTimeMillis();        CountDownLatch latch = new CountDownLatch(10);        for(int i = 0; i<latch.getCount(); i++){            new Thread(new Test(latch, i, list)).start();        }        latch.await();        System.out.println("=====异步执行:耗时"+(System.currentTimeMillis()-start1)+"毫秒======");    }    static class Test implements Runnable{        private CountDownLatch latch;        private int i;        private List list;        Test(CountDownLatch latch, int i, List list){            this.latch = latch;            this.i = i;            this.list = list;        }        @SneakyThrows        @Override        public void run() {            for(int a = i*10; a<(i+1)*10; a++){                // 执行任务逻辑                Thread.sleep(100);            }            latch.countDown();        }    }}

执行结果:
在这里插入图片描述

:如果多个线程并行执行一个任务,则初始count值必须与启动线程数保持一致,即count为10,则必须开启10 个异步线程

来源地址:https://blog.csdn.net/liu_da_da/article/details/124983187

--结束END--

本文标题: CountDownLatch详解以及用法示例

本文链接: https://www.lsjlt.com/news/403354.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CountDownLatch详解以及用法示例
    一、什么是countDownlatch CountDownLatch是一个同步工具类,它通过一个计数器来实现的,初始值为线程的数量。每当一个线程完成了自己的任务,计数器的值就相应得减1。当计数器到达0...
    99+
    2023-09-11
    java
  • Java.lang.Long.parseLong()方法详解及示例
    目录Java.lang.Long.parseLong()API解释:示例:参数:返回:抛出:附:示例代码总结Java.lang.Long.parseLong() 简单来说:是将一个字...
    99+
    2023-01-31
    java.lang.long.parselong()方法 Java.lang.Long.parseLong()方法 long.parselong用法
  • Oracle NVL函数详解及用法示例
    Oracle NVL函数详解及用法示例 在Oracle数据库中,NVL函数是一种非常常用的函数,其作用是用于判断一个值是否为null,若为null则返回另一个指定的值。本文将详细介绍N...
    99+
    2024-03-09
    用法 oracle nvl函数
  • Oracle DECODE函数详解及用法示例
    Oracle中的DECODE函数是一种条件表达式,常用于在查询语句中根据不同的条件返回不同的结果。本文将详细介绍DECODE函数的语法、用法和示例代码。 一、DECODE函数语法DEC...
    99+
    2024-03-08
    oracle 示例 decode
  • Java选择排序法以及实例详解
    选择排序技术是一种选择数组中最小的元素并与数组的第一个元素交换的方法。接下来,数组中第二小的元素与第二个元素交换,反之亦然。 这样,数组中的最小元素会被重复选择并放在适当的位置,直到...
    99+
    2022-11-13
    Java 排序法
  • python Fabric使用详解及示例
    abric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括:命令执行、文件上传、下载及完整执行日志输出等功能。Fabric在Paramik...
    99+
    2023-01-31
    示例 详解 python
  • 使用 gomonkey Mock 函数及方法示例详解
    目录前言函数方法参考前言 在 Golang 语言中,写单元测试的时候,不可避免的会涉及到对其他函数及方法的 Mock,即在假设其他函数及方法响应预期结果的同时,校验被测函数的响应是否...
    99+
    2024-04-02
  • Go语言基础map用法及示例详解
    目录概述语法声明和初始化读取删除遍历总结示例 概述 map是基于key-value键值对的无序的集合 Go语言中的map是引用类型 必须初始化才能使用。 ...
    99+
    2024-04-02
  • SQL注入的实现以及防范示例详解
    什么是SQL注入 SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作。 Sql 注入产生原因 我们访问动态网页时往往会向服务器发送请求,服务器向数据访问层发...
    99+
    2024-04-02
  • Golangtime.Sleep()用法及示例讲解
    在Go语言中,时间包提供了确定和查看时间的函数。 Go语言中的Sleep()函数用于在至少规定的持续时间d内停止最新的go-routine。睡眠时间为负数或零将导致此方法立即返回。此...
    99+
    2023-02-28
    go time.Sleep()用法 go time.Sleep() go time.Sleep
  • JSON.stringify实例详解以及灵活运用
    目录前言语法参数replacer参数space参数特性描述应用localStorage对象深拷贝属性过滤总结前言 工作中经常使用 JSON.stringify 方法存储 localS...
    99+
    2024-04-02
  • telnet命令详解及使用示例
           telnet 是一种用于远程访问和管理计算机网络设备、服务器和服务的协议和命令行工具。它可以用于连接到运行 Telnet 服务器软件的任何计算机,并在远程计算机上执行命令和操作。以下是 telnet 命令的详细解释和使用示例。...
    99+
    2023-08-31
    linux 服务器 运维
  • Go语言基础数组用法及示例详解
    目录概述语法注意示例 概述 固定长度,数组声明后长度便不能再修改 只能存储一种特定类型元素的序列 语法 编号...
    99+
    2024-04-02
  • mysql(5.6及以下)解析json的方法实例详解
    mysql(5.6及以下)解析json #json解析函数 DELIMITER $$ DROP FUNCTION IF EXISTS `json_extract_c`$$ CREATE ...
    99+
    2024-04-02
  • 【JAVA】CyclicBarrier源码解析以及示例
    文章目录 前言CyclicBarrier源码解析以及示例主要成员变量核心方法 应用场景任务分解与合并应用示例 并行计算应用示例 游戏开发应用示例输出结果 数据加载应用示例 并发工具的协...
    99+
    2023-12-22
    java 开发语言 jvm
  • Spring@value用法示例详解
    目录一、两种使用方法二、配置2.1 @Value(“#{configProperties[‘key’]}”)使用2.1.1配置文件:2...
    99+
    2024-04-02
  • nn.Flatten()函数详解及示例
    torch.nn.Flatten(start_dim=1, end_dim=- 1) 作用:将连续的维度范围展平为张量。 经常在nn.Sequential()中出现,一般写在某个神经网络模型之后,用于对神经网络模型的输出进行处理,得到ten...
    99+
    2023-09-01
    python 深度学习 开发语言 pytorch 人工智能
  • Mysql using 用法示例详解
    目录示例第一种第二种第三种示例 在平时,我们做关联表查询的时候一般是这样的 select * from 表1 inner join 表2 on 表1.相同的列=表2.相同的...
    99+
    2024-04-02
  • JavaHttpClient用法的示例详解
    目录1、导入依赖2、使用工具类3、扩展1、导入依赖 <dependency> <groupId>org.apache.httpcomponents&l...
    99+
    2024-04-02
  • Spring MVC文件配置以及参数传递示例详解
    web.xml文件配置 创建好一个SpringMVC项目后,需要在需要在WB-INF文件夹下配置web.xml文件 <?xml version="1.0" enc...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作