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

java CyclicBarrier

‌CyclicBarrier‌是一种在多线程编程中使用的同步机制,协调多个线程之间的执行。CyclicBarrier的字面意思是“循环屏障”,意味着当所有线程都到达这个屏障时,它们会一起继续执行。

代码:

static void testCyclicBarrier() {AtomicInteger phase = new AtomicInteger(0);String[] people = {"黄老邪", "欧阳锋", "洪七公", "段智兴", "老顽童", "王重阳"};// CyclicBarrier用于协调多个线程之间的执行。CyclicBarrier的字面意思是“循环屏障”// ,意味着当所有线程都到达这个屏障时,它们会一起继续执行。CyclicBarrier barrier = new CyclicBarrier(people.length, () -> {if (phase.addAndGet(1) == 1) {System.out.println("所有大侠在大理皇宫集合完毕,泡妞后继续出发去华山");} else if (phase.get() == 2) {System.out.println("所有大侠集合在华山集合完毕,开始比武");}});for (int i = 0; i < people.length; i++) {int finalI = i;new Thread(new Runnable() {@Overridepublic void run() {// 第一阶段:独立行进到集合点大理皇宫try {Thread.sleep((int)(Math.random() * 1000));} catch (InterruptedException e) {}System.out.println(people[finalI] + " 到达集合点大理皇宫");try {barrier.await(); // 等待所有线程到达A点} catch (InterruptedException e) {} catch (BrokenBarrierException e) {}// 第二阶段:独立行进到集合点华山(重用同一屏障)try {Thread.sleep((int)(Math.random() * 1000));} catch (InterruptedException e) {}System.out.println(people[finalI] + " 到达集合点华山");try {barrier.await();} catch (InterruptedException e) {} catch (BrokenBarrierException e) {}}}).start();}}

打印:

ok 。

另外, java的并发工具类还有CountDownLatch‌ 、Semaphore‌。CountDownLatch‌为计数器闭锁,等待多个任务完成(如主线程等待子任务全部结束)。Semaphore‌为信号量,控制同时访问资源的线程数量(如限流场景),当信号量设置为1时可以代替同步锁。 代码略

相关文章:

  • 模拟堆(算法题)
  • Linux电源管理(7)_Wakeup events framework
  • 【神经网络与深度学习】VAE 在解码前进行重参数化
  • 前端线上错误日志收集与定位指南
  • MySQL概念简介
  • C++ stl中的vector的相关用法 迭代器失效问题
  • 第4章 递推法
  • 1688拍立淘搜索相似商品API接口概述,json数据示例参考
  • 【编译原理】第五章 自下而上语法分析
  • HTML基础2-空元素,元素属性与页面的结构
  • 第35周Zookkeeper+Dubbo Dubbo
  • 力扣热题100之回文链表
  • CPU的基本认识
  • 企业数字化转型第二课:接受不完美(1/2)
  • 2025最新出版 Microsoft Project由入门到精通(二)
  • springboot国家化多语言实现
  • Python中的global与nonlocal关键字详解
  • AV1中的维纳滤波器
  • 数据管道的解耦艺术:Dagster I/O管理器实现存储与逻辑分离
  • Android开发-文本显示
  • 观察|印巴交火开始升级,是否会演变为第四次印巴战争?
  • “80后”海南琼海市长傅晟,去向公布
  • 马上评|独生子女奖励不能“私了”,政府诚信是第一诚信
  • 山大齐鲁医院通报“子宫肌瘤论文现男性患者”:存在学术不端
  • 消失的日本中年劳动者:任何人都有与社会脱节的风险
  • 今年五一档电影票房已破7亿