news 2026/8/11 8:35:05

JAVA并发:CountDownLatch与CyclicBarrier实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JAVA并发:CountDownLatch与CyclicBarrier实战

CountDownLatch:等别人做完再继续

适合场景:主线程等多个任务都完成后,再做汇总。

import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { int taskCount = 3; CountDownLatch latch = new CountDownLatch(taskCount); try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { for (int i = 1; i <= taskCount; i++) { int taskId = i; executor.submit(() -> { try { System.out.println("任务 " + taskId + " 开始执行"); Thread.sleep(1000L * taskId); System.out.println("任务 " + taskId + " 执行完成"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } finally { latch.countDown(); } }); } System.out.println("主线程等待所有任务完成..."); latch.await(); System.out.println("所有任务都完成了,主线程继续执行"); } } }

核心记法:

latch.countDown(); // 完成一个,计数减 1 latch.await(); // 等计数变成 0

CyclicBarrier:大家到齐再一起继续

适合场景:多个线程都准备好以后,再同时进入下一阶段。

import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class CyclicBarrierDemo { public static void main(String[] args) { int workerCount = 3; CyclicBarrier barrier = new CyclicBarrier(workerCount, () -> { System.out.println("所有线程都到达栅栏,开始下一阶段"); }); try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { for (int i = 1; i <= workerCount; i++) { int workerId = i; executor.submit(() -> { try { System.out.println("线程 " + workerId + " 正在准备"); Thread.sleep(1000L * workerId); System.out.println("线程 " + workerId + " 到达栅栏"); barrier.await(); System.out.println("线程 " + workerId + " 继续执行后续任务"); } catch (Exception e) { e.printStackTrace(); } }); } } } }

核心记法:

barrier.await(); // 到栅栏这里等,直到指定数量的线程都到齐

一句话区别:

CountDownLatch:一个线程等多个线程完成。 CyclicBarrier:多个线程互相等,大家到齐再一起走。

CountDownLatch一般是一次性的;CyclicBarrier可以循环复用,所以名字里有Cyclic

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

天玑9300+与骁龙8s Gen 3性能对决:iQOO Z9 Turbo+与Redmi Turbo 4 Pro深度对比

这次我们直接来看两款近期备受关注的性能向中端手机&#xff1a;iQOO Z9 Turbo 与 Redmi Turbo 4 Pro。它们的核心看点非常明确&#xff0c;就是分别搭载了联发科天玑9300和高通骁龙8s Gen 3这两颗旗舰级处理器&#xff0c;在相近的价位段里&#xff0c;上演了一场“天玑”与“…

作者头像 李华
网站建设 2026/8/11 8:32:00

Headless浏览器自动化:如何捕获页面早期错误与JS异常

1. 项目概述&#xff1a;当AI“睁眼瞎”&#xff0c;问题出在哪&#xff1f; 最近在调试一个基于Headless Chrome的自动化爬虫时&#xff0c;遇到了一个让我排查了整整两天的诡异问题。我的脚本逻辑清晰&#xff0c;等待策略完备&#xff0c;但就是抓取不到目标页面上那些一闪而…

作者头像 李华
网站建设 2026/8/11 8:31:59

可量化的成果Nordic nRF54L15 SoC

在其 Bluetooth LE PIR 传感器产品线上取得了显著提升&#xff0c;包括&#xff1a;在 100 节点的 Mesh 网络中保持稳定运行触发到点亮的延迟从约 200 ms 降至不足 80 ms&#xff0c;降低幅度达 60%为未来的电池版机型带来约 35% 的平均功耗下降通过标准 Mesh调光与占用模型更快…

作者头像 李华
网站建设 2026/8/11 8:29:30

免费高清录屏软件推荐与实用技巧

1. 为什么我们需要一款免费不限时的录屏软件&#xff1f; 在数字内容创作和远程协作成为主流的今天&#xff0c;屏幕录制已经从一个专业需求变成了大众刚需。想象一下这些场景&#xff1a;线上会议需要记录关键讨论、网课学习需要反复回看难点、游戏玩家想要分享精彩操作、软件…

作者头像 李华
网站建设 2026/8/11 8:24:47

DeepInfra平台调用Ling-3.0-flash大模型:从API集成到工程实践

最近在尝试将大模型集成到自己的应用里&#xff0c;发现很多优秀的开源模型要么部署复杂&#xff0c;要么推理成本高&#xff0c;要么API调用不便。特别是对于一些需要快速响应、成本敏感的场景&#xff0c;找到一个“又快又好”的模型服务是个不小的挑战。 今天要聊的 Ling-…

作者头像 李华
网站建设 2026/8/11 8:24:16

Windows下Boost库编译指南:从源码构建到项目集成

1. 项目概述&#xff1a;为什么要在Windows下亲手编译Boost&#xff1f;如果你在Windows上用C做过稍微复杂点的项目&#xff0c;尤其是涉及到网络、线程、文件系统或者需要一些高级数据结构和算法时&#xff0c;大概率会听说过或者已经用上了Boost库。Boost被誉为“C的准标准库…

作者头像 李华