当前位置: 首页 > news >正文

Java CountDownLatch

Java CountDownLatch

CountDownLatch 是 Java 并发编程中一种简单的同步工具,核心作用是让一个线程等待一个或多个线程完成工作后再继续执行,从而避免临界资源并发访问引发的问题。

核心原理

  • 初始化时指定「倒计时次数」,代表需要等待的线程任务数量。
  • 每个被等待的线程完成工作后,调用 countDown() 方法将倒计时次数减 1。
  • 等待线程调用 await() 方法后会阻塞,直到倒计时次数变为 0 才继续执行。

完整代码实现

工人类(Worker)

封装线程要执行的具体任务,通过休眠模拟工作耗时。

package com.countdownlatch;/*** 工人类:定义线程需要执行的工作逻辑* @author Jing61*/
public class Worker {private String name;        // 工人名称private long workDuration;  // 工作持续时间(毫秒)/*** 构造器:初始化工人信息* @param name 工人名称* @param workDuration 工作耗时*/public Worker(String name, long workDuration) {this.name = name;this.workDuration = workDuration;}/*** 工作执行方法:模拟具体业务逻辑*/public void doWork() {System.out.println(name + " begins to work...");try {// 休眠对应时长,模拟实际工作执行过程Thread.sleep(workDuration);} catch (InterruptedException ex) {// 捕获线程中断异常,打印异常信息ex.printStackTrace();}System.out.println(name + " has finished the job...");}
}

测试线程类(WorkerTestThread)

实现 Runnable 接口,作为线程执行体,关联 Worker 和 CountDownLatch。

package com.countdownlatch;import java.util.concurrent.CountDownLatch;/*** 测试线程类:包装 Worker 任务,结合 CountDownLatch 实现同步* @author Jing61*/
public class WorkerTestThread implements Runnable {private Worker worker;       // 关联的工人实例(具体任务)private CountDownLatch cdLatch; // 倒计时闩(用于同步控制)/*** 构造器:注入任务和同步工具* @param worker 具体工作任务* @param cdLatch 同步用倒计时闩*/public WorkerTestThread(Worker worker, CountDownLatch cdLatch) {this.worker = worker;this.cdLatch = cdLatch;}@Overridepublic void run() {worker.doWork();        // 执行具体工作任务cdLatch.countDown();    // 任务完成后,倒计时次数减 1}
}

主测试类(CountDownLatchTest)

初始化 CountDownLatch、Worker 实例,启动线程并实现同步等待。

package com.countdownlatch;import java.util.concurrent.CountDownLatch;/*** CountDownLatch 实战测试类:演示多线程同步等待场景* @author Jing61*/
public class CountDownLatchTest {// 常量定义:工作时间范围(毫秒)private static final int MAX_WORK_DURATION = 5000;  // 最大工作时间private static final int MIN_WORK_DURATION = 1000;  // 最小工作时间/*** 工具方法:生成指定范围内的随机工作时间* @param min 最小时长* @param max 最大时长* @return 随机工作时长(毫秒)*/private static long getRandomWorkDuration(long min, long max) {return (long) (Math.random() * (max - min) + min);}public static void main(String[] args) {// 1. 创建 CountDownLatch,指定需要等待 2 个线程完成CountDownLatch latch = new CountDownLatch(2);// 2. 创建 2 个工人实例,分配随机工作时长Worker w1 = new Worker("Peppa", getRandomWorkDuration(MIN_WORK_DURATION, MAX_WORK_DURATION));Worker w2 = new Worker("Emily", getRandomWorkDuration(MIN_WORK_DURATION, MAX_WORK_DURATION));// 3. 启动线程,执行工作任务new Thread(new WorkerTestThread(w1, latch)).start();new Thread(new WorkerTestThread(w2, latch)).start();try {// 4. 主线程阻塞等待,直到 2 个工作线程都完成(count 减为 0)latch.await();// 5. 所有线程完成后,执行后续逻辑System.out.println("All jobs have been finished!");} catch (InterruptedException e) {// 捕获主线程中断异常e.printStackTrace();}}
}

代码说明与扩展

关键方法解析

  • CountDownLatch(int count):构造器,指定需要等待的线程数量(count 为 0 时,await() 不会阻塞)。
  • countDown():倒计时次数减 1,线程安全,可被多个线程同时调用。
  • await():调用线程阻塞,直到 count 变为 0 或线程被中断。
  • 扩展方法:await(long timeout, TimeUnit unit),支持超时等待,避免无限阻塞。

典型应用场景

  • 任务拆分:主线程拆分任务给多个子线程,等待所有子线程完成后汇总结果。
  • 资源初始化:应用启动时,等待数据库、缓存等多个组件初始化完成后再提供服务。
  • 并发测试:协调多个测试线程同时开始执行,模拟高并发场景。
http://www.jsqmd.com/news/40032/

相关文章:

  • GEO:AI搜索时代的新增长方式,以及灵捷AI的实践路径
  • 详细介绍:JVM Java虚拟机
  • [电调]AM32电调调参系列 —— Active brake on stop power 和 Brake on stop的区别
  • 2025 最新车床厂家推荐榜:聚焦高精度智能设备,涵盖立式 / 双主轴 / 车铣复合等热门机型
  • 2025年工业用离心机源头厂家权威推荐榜单:过滤离心机/高钾离心机/自动卸料离心机实力厂家精选
  • 2025 最新表冷器源头厂家权威推荐榜:14 项专利加持 + 国际测评认证,锂电表冷器/钎焊板式换热表冷器/铜管串铝翅片表冷器公司推荐
  • N - 翻译布尔表达式
  • 2025年市场上桥洞力学板开发公司排名背后故事:技术与实力的深度解析
  • 2025年10月桥洞力学板公司口碑排行情况
  • 2025年重庆脊柱矫正服务权威推荐榜单:中医理疗/经络/正脊服务精选
  • 2025全球知名连接器品牌价值榜与中国企业崛起:十大品牌全景测评与选型指南
  • 大气模式
  • 2025年存包储物柜实力厂家权威推荐榜单:公共场所储物柜/酒店储物柜/超市储物柜源头厂家精选
  • C# PuppeteerSharp html转pdf
  • 大气环流模式
  • 2025年隔音净化板制造厂权威推荐榜单:电子厂净化板/保温净化板/抗静电净化板源头厂家精选
  • 2025年阻燃泡沫批发厂家权威推荐榜单:防水泡沫/密封海绵/阻燃棉源头厂家精选
  • 2025年青年旅舍太空舱源头厂家综合推荐:太空舱民宿/旅游太空舱民宿/景观移动太空舱酒店设备精选指南
  • 动态主机配置协议(DHCP)中的中继机制及其配置方法
  • 使用神经网络处理逻辑异或门问题
  • MATLAB实现光谱特征波长提取
  • 支持服务器的文件同步软件提升数据管理效率
  • 2025年重庆吊装搬运公司权威推荐榜单:起重设备/专业吊装/起重机源头公司精选
  • 2025年快装集成墙板厂家权威推荐榜单:集成墙板整装/碳晶板整装/A级防火板整装源头厂家精选
  • JAVA根据对象属性名和对象实体获取对象中该属性名的某个注解
  • 2025年11月权威信息公布:轴连/水泵/转向/圆锥滚子/汽车水泵轴承源头厂家综合排名:徐州优力同创科技股份有限公司
  • 谱模式(Spectral model)
  • 2025年11月冷再生机/水泥板破碎机生产厂家推荐榜单:环硕建设领跑行业
  • 数据跨境传输如何提升速度的有效策略与实践
  • 2025年11月储能/新能源汽车/机器人/低空飞行器/工业线束生产厂家排行榜:技术实力与品质保障的全面解析