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

CountDownLatch

CountDownLatch

内部静态类Sync

  • 继承自AbstractQueuedSynchronizer
  • tryAcquireShared()
  • tryReleaseShared()
  • 当state != 0时,获取锁失败,线程阻塞
  • 当state==0时,释放锁成功,唤醒线程
protectedinttryAcquireShared(intacquires){return(getState()==0)?1:-1;}protectedbooleantryReleaseShared(intreleases){// Decrement count; signal when transition to zerofor(;;){intc=getState();if(c==0)returnfalse;intnextc=c-1;if(compareAndSetState(c,nextc))returnnextc==0;}}

主要方法

  • await()
  • countDown()
publicvoidawait()throwsInterruptedException{sync.acquireSharedInterruptibly(1);}publicbooleanawait(longtimeout,TimeUnitunit)throwsInterruptedException{returnsync.tryAcquireSharedNanos(1,unit.toNanos(timeout));}publicvoidcountDown(){sync.releaseShared(1);}

测试

Thread 0 started
countDown第1次完成
countDown第2次完成
countDown第3次完成
Thread 0 执行结束

privatestaticvoidtestCountDownLatch()throwsInterruptedException{CountDownLatchlatch=newCountDownLatch(3);ExecutorServiceexecutor=null;try{executor=Executors.newFixedThreadPool(1);for(inti=0;i<1;i++){intfinalI=i;executor.submit(()->{try{System.out.println("Thread "+finalI+" started");latch.await();System.out.println("Thread "+finalI+" 执行结束");}catch(InterruptedExceptione){thrownewRuntimeException(e);}});}for(inti=0;i<3;i++){TimeUnit.SECONDS.sleep(1);latch.countDown();System.out.println("countDown第"+(i+1)+"次完成");TimeUnit.SECONDS.sleep(1);}}finally{if(executor!=null){executor.shutdown();}}}
http://www.jsqmd.com/news/1075194/

相关文章:

  • Kubernetes RBAC 实战指南
  • Cloudflare 发起回源连接断开,连不上 443 端口的原因
  • 终极窗口调整指南:如何用WindowResizer轻松掌控任意窗口尺寸
  • 香港国际资源型EMBA实测解析与2026选型指南
  • 卡美德生物科普Noggin(诺金蛋白):解析发育与修复的核心调控机制
  • 2026降AI率工具红黑榜:降AI率网站怎么选?这份榜单够用!
  • 【C 语言项目实战】基于链表与文件操作的标准化彩票管理系统设计与实现
  • 从C到C++:从结构体到类,面向对象初体验
  • AI+BI行业趋势:为什么给BI加个对话框,不等于真正实现了AI化
  • 适合新手的AI作曲工具推荐,零基础也能轻松生成原创旋律
  • 感知算法工程师最值钱的能力:处理异常场景
  • 为什么 React 和 Vue 不一样?
  • SQL注入漏洞实战:从原理到停车场系统漏洞挖掘与修复
  • 【操作系统】进程控制块PCB与上下文切换
  • 大模型微调缺数据?合成数据实战指南
  • FlyOOBE:为老旧硬件开启Windows 11升级新纪元的技术伙伴
  • UVa 599 The Forrest for the Trees
  • Strix Halo 内存带宽测试,大模型推理速度瓶颈分析
  • 1000 tokens/s 到底有多快?我用 8 次 API 请求,测了 4 款国产大模型
  • ICLR 2026 Oral 用 RL 训 Embedder 而非 LLM:Q-RAG 把多步检索成本砍到几乎免费
  • 深度学习进阶(十三)可变形卷积 DCN
  • 卡美德生物科普RSPO1(R-spondin 1):解析组织再生与发育的核心调控机制
  • billd-desk终极指南:如何构建企业级远程桌面控制与游戏串流平台
  • 2026年6月24日(周三)——科创50暴涨3.82%背后的结构性撕裂
  • Visual C++ Redistributable AIO:三分钟解决Windows程序运行问题的完整指南
  • AI 编程时代,UI 设计系统也需要工程化:从 Google DESIGN.md 说起
  • pkg-config介绍
  • Gemma 4 微调 商品分类
  • 吾爱出品,相当炸裂!!
  • 2026零基础录音转文字入门指南避坑教学包教包会看完可直接上手