news 2026/7/31 17:07:08

Java CountDownLatch 代码示例及使用细节总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java CountDownLatch 代码示例及使用细节总结

CountDownLatch 极简入门示例

1. 基础使用示例

importjava.util.concurrent.CountDownLatch;publicclassSimpleCountDownLatchDemo{publicstaticvoidmain(String[]args)throwsInterruptedException{// 创建计数器,初始值为3CountDownLatchlatch=newCountDownLatch(3);// 创建3个线程for(inti=1;i<=3;i++){intthreadId=i;newThread(()->{try{Thread.sleep(threadId*1000L);System.out.println("线程"+threadId+" 完成任务");}catch(InterruptedExceptione){e.printStackTrace();}finally{// 计数器减1(必须执行)latch.countDown();}}).start();}// 主线程等待所有子线程完成System.out.println("主线程等待中...");latch.await();// 阻塞,直到计数器为0System.out.println("所有线程完成,主线程继续执行");}}

2. 带超时时间的示例

importjava.util.concurrent.CountDownLatch;importjava.util.concurrent.TimeUnit;publicclassTimeoutDemo{publicstaticvoidmain(String[]args)throwsInterruptedException{CountDownLatchlatch=newCountDownLatch(5);for(inti=1;i<=5;i++){newThread(()->{try{Thread.sleep(2000);// 每个线程执行2秒System.out.println(Thread.currentThread().getName()+" 完成");}finally{latch.countDown();}}).start();}// 最多等待3秒booleansuccess=latch.await(3,TimeUnit.SECONDS);if(success){System.out.println("✓ 所有任务在规定时间内完成");}else{System.out.println("✗ 等待超时,仍有任务未完成");System.out.println("剩余计数: "+latch.getCount());}}}

3. 实用场景示例:比赛起跑

importjava.util.concurrent.CountDownLatch;publicclassRaceDemo{publicstaticvoidmain(String[]args)throwsInterruptedException{intrunnerCount=4;CountDownLatchreadyLatch=newCountDownLatch(runnerCount);CountDownLatchstartLatch=newCountDownLatch(1);CountDownLatchfinishLatch=newCountDownLatch(runnerCount);// 运动员线程for(inti=1;i<=runnerCount;i++){intrunnerId=i;newThread(()->{try{// 1. 准备就绪Thread.sleep((long)(Math.random()*1000));System.out.println("运动员"+runnerId+" 准备就绪");readyLatch.countDown();// 2. 等待发令枪响startLatch.await();System.out.println("运动员"+runnerId+" 起跑!");// 3. 跑步Thread.sleep((long)(Math.random()*3000));System.out.println("运动员"+runnerId+" 到达终点");}catch(InterruptedExceptione){e.printStackTrace();}finally{finishLatch.countDown();}}).start();}// 裁判线程readyLatch.await();// 等待所有运动员就绪System.out.println("\n所有运动员准备就绪,比赛开始!\n");Thread.sleep(1000);// 准备时间startLatch.countDown();// 发令枪响finishLatch.await();// 等待所有运动员完成System.out.println("\n比赛结束!");}}

4. 最简单的单线程等待示例

importjava.util.concurrent.CountDownLatch;publicclassSimplestDemo{publicstaticvoidmain(String[]args)throwsInterruptedException{// 只有一个任务需要等待CountDownLatchlatch=newCountDownLatch(1);newThread(()->{try{Thread.sleep(2000);System.out.println("后台任务执行完成");}finally{latch.countDown();// 必须放在finally中}}).start();System.out.println("主线程等待中...");latch.await();System.out.println("主线程继续执行");}}

5. 常用方法速查表

方法说明示例
CountDownLatch(int count)创建计数器new CountDownLatch(5)
await()等待计数器归零latch.await()
await(timeout, unit)带超时等待latch.await(3, TimeUnit.SECONDS)
countDown()计数器减1latch.countDown()
getCount()获取当前计数值latch.getCount()

核心要点总结

  1. 初始化new CountDownLatch(N)- 创建N个任务的计数器
  2. 等待latch.await()- 主线程等待
  3. 完成latch.countDown()- 每个任务完成后调用
  4. 必须countDown()必须放在finally
  5. 建议:使用带超时的await()避免永久阻塞

记住:一次性的,用完即弃,不能重置重用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 2:43:25

R语言生态模型诊断核心技术:如何在3小时内完成全流程验证与优化?

第一章&#xff1a;R语言生态环境模型诊断概述R语言因其强大的统计计算与可视化能力&#xff0c;已成为生态学建模与环境数据分析的重要工具。在生态系统模型的构建过程中&#xff0c;模型诊断是确保结果可靠性与科学性的关键步骤。它不仅涉及残差分析、过拟合检测&#xff0c;…

作者头像 李华
网站建设 2026/7/30 21:44:31

【R语言+GPT智能调试】:数据科学家都在用的7种高阶策略

第一章&#xff1a;R语言与GPT智能调试的融合趋势随着人工智能技术的不断演进&#xff0c;R语言作为数据科学领域的重要工具&#xff0c;正逐步与大型语言模型&#xff08;如GPT系列&#xff09;深度融合&#xff0c;形成全新的智能调试范式。这种融合不仅提升了代码编写效率&a…

作者头像 李华
网站建设 2026/7/31 3:59:51

YOLOv5用户转型必看:YOLOv8有哪些关键升级点?

YOLOv8 关键升级解析&#xff1a;从 YOLOv5 到统一视觉框架的跃迁 在计算机视觉领域&#xff0c;目标检测模型的演进从未停歇。当许多团队还在基于YOLOv5构建智能监控、工业质检或自动驾驶感知系统时&#xff0c;Ultralytics悄然推出了其继任者——YOLOv8。这款于2023年正式发布…

作者头像 李华
网站建设 2026/7/30 11:44:42

​​解锁AI Agent开发新姿势:Coze Studio,让创意秒变现实

引言 在AI技术飞速发展的今天&#xff0c;AI Agent&#xff08;智能体&#xff09;已成为推动行业变革的核心力量。无论是智能客服、自动化流程&#xff0c;还是个性化助手&#xff0c;AI Agent的应用场景正不断拓展。然而&#xff0c;传统开发方式往往需要深厚的编程基础和复…

作者头像 李华
网站建设 2026/7/30 15:03:18

YOLOv8图文匹配潜力评估

YOLOv8图文匹配潜力评估 在智能视觉应用日益普及的今天&#xff0c;如何快速构建一个稳定、高效的目标检测系统&#xff0c;已经成为开发者面临的核心挑战之一。从自动标注到图文内容理解&#xff0c;再到多模态检索&#xff0c;目标检测不仅是基础能力&#xff0c;更是连接图像…

作者头像 李华