当前位置: 首页 > 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.zskr.cn/news/49226.html

相关文章:

  • 详细介绍:JVM Java虚拟机
  • [电调]AM32电调调参系列 —— Active brake on stop power 和 Brake on stop的区别
  • 2025年市场上桥洞力学板开发公司排名背后故事:技术与实力的深度解析
  • 2025年重庆脊柱矫正服务权威推荐榜单:中医理疗/经络/正脊服务精选
  • 大气模式
  • 2025年阻燃泡沫批发厂家权威推荐榜单:防水泡沫/密封海绵/阻燃棉源头厂家精选
  • 2025年青年旅舍太空舱源头厂家综合推荐:太空舱民宿/旅游太空舱民宿/景观移动太空舱酒店设备精选指南
  • JAVA根据对象属性名和对象实体获取对象中该属性名的某个注解
  • 2025年11月储能/新能源汽车/机器人/低空飞行器/工业线束生产厂家排行榜:技术实力与品质保障的全面解析
  • Spring Boot Security 实现后台权限管理系统(三)
  • ubuntu开机强制挂载windows分区
  • TOMCAT Docker 容器化部署指南
  • RustFS 重要变更,让容器化部署更安全
  • 2025年口碑好的风冷一体化加热器厂家实力及用户口碑排行榜
  • vscode python2代码debug
  • 2025年知名的远红外节能加热圈厂家推荐及采购指南
  • 2025 年 11 月干燥机厂家推荐排行榜,离心喷雾干燥机,压力喷雾干燥机,气流干燥机,振动流化床干燥机,旋转闪蒸干燥机,回转滚筒干燥机公司推荐
  • 无法获得锁 /var/lib/dpkg/lock-frontend
  • 2025年成都殡仪一条龙公司权威推荐榜单:殡仪/殡仪一条龙/陵园墓地源头公司精选
  • 2025年AI营销服务怎么选
  • 2025年膜结构景观订做厂家口碑推荐
  • 2025年糖果上浆机厂商口碑推荐榜单
  • 2025年汽车棚订做厂家口碑排行榜单
  • linux命令ll显示结果的含义
  • 2025年高精度珩磨机订做厂家推荐榜单
  • Unicode “包含” GB18030吗?
  • 2025年口碑好的呼吸三型瓶四型瓶厂家推荐及采购指南
  • 比杨云激活出现faild to open the file xxxx edge:Text file busy
  • 2025年烤肉桌椅厂家权威推荐榜单:电动桌椅/火锅桌椅/快餐桌椅源头厂家精选
  • 2025年靠谱的低温绝热三型瓶四型瓶厂家最新TOP排行榜