城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

CountDownLatch指南

5月5日 游鱼坊投稿
  概述
  通过使用CountDownLatch,可以阻塞线程,直到其他线程完成给定的任务。
  CountDownLatch有一个计数器字段,该值与我们想要处理的线程数相同。然后,可以在每个线程完成后调用countdown(),保证调用await()的依赖线程将阻塞,直到工作线程完成。等待线程池完成
  让我们通过创建一个Worker并使用CountDownLatch字段在完成时发出信号来尝试这种模式:publicclassWorkerimplementsRunnable{privateListStringoutputSprivateCountDownLatchcountDownLpublicWorker(ListStringoutputScraper,CountDownLatchcountDownLatch){this。outputScraperoutputSthis。countDownLatchcountDownL}Overridepublicvoidrun(){doSomeWork();outputScraper。add(Counteddown);countDownLatch。countDown();}}
  创建一个测试,验证可以获得CountDownLatch来等待Worker实例完成:TestpublicvoidwhenParallelProcessingthenMainThreadWillBlockUntilCompletion()throwsInterruptedException{ListStringoutputScraperCollections。synchronizedList(newArrayList());CountDownLatchcountDownLatchnewCountDownLatch(5);ListThreadworkersStream。generate(()newThread(newWorker(outputScraper,countDownLatch)))。limit(5)。collect(toList());workers。forEach(Thread::start);countDownLatch。await();outputScraper。add(Latchreleased);assertThat(outputScraper)。containsExactly(Counteddown,Counteddown,Counteddown,Counteddown,Counteddown,Latchreleased);}等待同时开始的线程池
  如果启动了数千个线程,那么很可能许多前面的线程在我们对后面的线程调用start()之前就已经完成了处理。这可能会使尝试和再现并发问题变得困难,因为我们无法使所有线程并行运行。
  为了解决这个问题,可以使用CountdownLatch阻塞每个子线程,直到所有其他子线程都开始。publicclassWaitingWorkerimplementsRunnable{privateListStringoutputSprivateCountDownLatchreadyThreadCprivateCountDownLatchcallingThreadBprivateCountDownLatchcompletedThreadCpublicWaitingWorker(ListStringoutputScraper,CountDownLatchreadyThreadCounter,CountDownLatchcallingThreadBlocker,CountDownLatchcompletedThreadCounter){this。outputScraperoutputSthis。readyThreadCounterreadyThreadCthis。callingThreadBlockercallingThreadBthis。completedThreadCountercompletedThreadC}Overridepublicvoidrun(){readyThreadCounter。countDown();try{callingThreadBlocker。await();doSomeWork();outputScraper。add(Counteddown);}catch(InterruptedExceptione){e。printStackTrace();}finally{completedThreadCounter。countDown();}}}
  修改测试用例,使其阻塞直到所有Workers都开始,取消阻塞Workers,然后阻塞直到Workers完成:TestpublicvoidwhenDoingLotsOfThreadsInParallelthenStartThemAtTheSameTime()throwsInterruptedException{ListStringoutputScraperCollections。synchronizedList(newArrayList());CountDownLatchreadyThreadCounternewCountDownLatch(5);CountDownLatchcallingThreadBlockernewCountDownLatch(1);CountDownLatchcompletedThreadCounternewCountDownLatch(5);ListThreadworkersStream。generate(()newThread(newWaitingWorker(outputScraper,readyThreadCounter,callingThreadBlocker,completedThreadCounter)))。limit(5)。collect(toList());workers。forEach(Thread::start);readyThreadCounter。await();outputScraper。add(Workersready);callingThreadBlocker。countDown();completedThreadCounter。await();outputScraper。add(Workerscomplete);assertThat(outputScraper)。containsExactly(Workersready,Counteddown,Counteddown,Counteddown,Counteddown,Counteddown,Workerscomplete);}
  这种模式对于尝试重现并发错误非常有用,因为它可以用来迫使数千个线程尝试并行执行一些逻辑。提前终止CountdownLatch
  有时,可能会遇到这样一种情况,即Workers在倒计时之前错误地终止。这可能导致永远不会达到零,await()永远不会终止:Overridepublicvoidrun(){if(true){thrownewRuntimeException(Ohdear,ImaBrokenWorker);}countDownLatch。countDown();outputScraper。add(Counteddown);}
  为了解决这个问题,await()的调用可添加一个超时参数。booleancompletedcountDownLatch。await(3L,TimeUnit。SECONDS);assertThat(completed)。isFalse();结论
  CountDownLatch用来阻塞线程,直到其他线程完成一些处理的业务场景。
投诉 评论 转载

CountDownLatch指南概述通过使用CountDownLatch,可以阻塞线程,直到其他线程完成给定的任务。CountDownLatch有一个计数器字段,该值与我们想要处理的线程数相同。然……自闭症儿子一天哭800次,亲戚办婚礼叮嘱别让他来自闭症会不会影响我们的人际关系,周围人会如何看待自闭症?大米和小米采访过不少家长,他们有的独自带娃、孤立无援;有的在确诊后得到了亲友的帮助,查资料、找机构、向认识的……美上天了!小米13Ultra公布外观,售价被曝光,或将来到七小米13Ultra即将到来,还有一天就发布了,就在这紧要关头,保密工作竟然出了疏忽,内部领用价格被曝光了,顶配的售价高达7499,有朝一日小米也卖到了四千价位,但看完具体配置后……股价创近年新高,中国移动市值超过茅台?差得还有点远在一季度经济数据可能超预期的刺激下,中字头今天再现狂飙式上涨,至午盘时不少个股都又一次创了近几年的新高。其中,三桶油中:中石油大涨4。93、中国海油涨4。54,中石化涨3……精彩绝伦!中国经典舞剧丝路花雨添彩澳门甘肃文化旅游周中国甘肃网4月18日讯(本网记者张兰琴)4月17日晚,澳门百老汇剧场内,驼铃悠扬,舞姿曼妙,由甘肃演艺集团歌舞剧院表演的《丝路花雨》精彩亮相,近2000名澳门观众在家门口一睹中……张湾樱桃红了!4月20日汉江樱桃节开幕汉江记忆寻味乡樱第八届汉江樱桃节,将于4月20日在十堰汉江路街道柳家河村移民广场举办。本届汉江樱桃节,游客除了可以采摘樱桃,还能观看开幕式表演,现场体验烘焙,制作樱桃饮品等活动……妈妈你别不理我,家长的情感忽视,是对孩子最大的伤害文章纯属原创,版权归本作者所有,欢迎个人转发分享。之前有段热门视频,令我印象深刻:一个一岁左右的孩子看见妈妈就倒地哭,但是妈妈没有理孩子,和狗狗走到房间。孩子看到妈……今晚我与乒乓球教练一同喝酒今晚我请三位球友小酌。客人中一位教练,带着一他的一位学员,一同就餐。席间,我看到了教练对他这个学员无微不至的关心与爱护。开席前,先是让他的学员到把台,点要他自己喜欢喝的饮……2023新装机打造一台属于自己的DDR5平台关于本次装机随着各大厂商DDR5的量产带来的更加亲民的价格,未来一两年DDR5逐渐会成为存储的主流,而市面上有些DDR5的价格甚至与DDR4价格持平,这次装机用的是酷兽银……最新研究多吃豆制品可以降低糖尿病和心血管疾病风险!血管疾病(CVD)和2型糖尿病(T2D)是导致全球死亡和残疾的主要原因。这些疾病不仅会缩短患者的寿命,还会带来巨大的社会、心理和经济负担。几项研究表明,健康的饮食和生活方式可以……面馆老板开业才几天,都快哭了,这才是真实的夫妻档吧头条创作挑战赛从开年以来,身边就涌现了不少朋友去开餐饮店,大部分都是餐饮小白,最多只知道什么好吃,什么不好吃。但对于餐饮经营啥都不懂,甚至有些连房租需要涉及的什么费用都不……在日本生活九个月宝宝的入园典礼人类幼崽成长记在日本生活,九个月宝宝的入学典礼。在日本九个月的宝宝上学居然还有入学典礼。我们一家暂时生活在日本,孩子也在日本生活。因为我们夫妻俩工作原因,只能把宝宝送到学校。你们看,这……
华为畅享50开售,搭载6000毫安时大电池,1299起贵但不耐用消费者报告将戴森吸尘器剔除推荐名单乾隆何故对圆明园情有独钟难道有什么秘密常常熬夜或失眠,情绪不好皮肤老化脱发?2个安神汤助睡眠唐嫣,一生悬命傻白甜打听造句用打听造句大全乌龟肠炎病能传染人吗吃什么食物护眼保护视力的八大食品1亿签字费5000万欧年薪!皇马无奈屈服,36球21助神锋尘李华造句用李华造句大全红孩儿会喷火为什么他父亲牛魔王不会喷火踩油门造句用踩油门造句大全全国白条猪批发价格今日股权投资管理企业成立条件有哪些?我在打飞机孔子:我最好的弟子,也缺少这种重要的能力观察昆虫作文200字5篇大胜牙买加队提前一轮晋级加拿大36年后再进世界杯决赛圈情感夜话有钱后的男人为什么普遍会翻山越嶺联想P770支持联通卡吗骨关节炎平时注意事项骨关节炎患者要注意这7项霸气又超拽的经典短句,特别有魅力,看了一遍又一遍哥伦布冲锋衣贵不贵

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找