国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

简单地理解区分CountDownLatch与CyclicBarrier--高并发编

发布时间:2019/09/16标签:   线程    点击量:

原标题:简单地理解区分CountDownLatch与CyclicBarrier--高并发编
本文重要探讨在高并发编程中两十分有用东西CyclicBarrier(同步屏蔽)和CountDownLatch(倒计时锁),二者都是java.util.concurrent并发包内十分有效的并发东西类,为了关心懂得会联合一些有味的比方,上面将对二者停止探讨。编程1、CountDownLatch倒计时锁(一个线程等候别的N个线程实现某个事件以后才干履行)//创立一个倒计时锁,设置值为5finalCountDownLatchlatch=newCountDownLatch(5);try{//启用5个线程for(inti=1;i<=5;i++){newThread(newRunnable(){@Overridepublicvoidrun(){try{Thread.sleep(1000);}catch(Exceptione){e.printStackTrace();}System.out.println("子线程履行!");//让latch锁中的数值减1latch.countDown();}}).start();}//处于堵塞状况直到latch中数值为零才履行后续操纵latch.await();System.out.println("主线程履行");}catch(Exceptione){System.out.println("捕捉异样");}}运转成果:简单地理解区分CountDownLatch与CyclicBarrier--高并发编程剖析:倒计时锁懂得起来比拟轻易,这里经过联合现实场景关心懂得。场景:一张数据表中寄存大批的数据,现要读取内外的全部信息。为了进步读取效力便经过在主线程中开启多个子线程合作配合对数据表停止读取。接上去要等候全体子线程读取结束以后,将读取到的内容停止汇总并在主线程中停止处置。 起首先设置一个CountDownLatch倒计时锁 ,并设置倒计时价为5 每一个子线程停止本人的任务,当任务履行结束结束后经过履行latch.countDown()对倒计时锁的值停止减1操纵,表现本人任务实现。 主线程latch.await() 后的代码段始终属于等候状况,直到CountDownLatch的值为0时才持续履行。简单地理解区分CountDownLatch与CyclicBarrier--高并发编程2、可轮回应用的屏蔽CyclicBarrier(N个线程彼此等候,任何一个线程实现之前,全部的线程都必需等候)//树立一个屏蔽并设定一个值,当有充足的线程到达屏蔽时再一同开释CyclicBarrierbarrier=newCyclicBarrier(5,()->{System.out.println("开端游戏");});ExecutorServiceexecutorPool=Executors.newCachedThreadPool();for(inti=1;i<=5;i++){intnum=i;Thread.sleep(1000);executorPool.execute(()->{try{System.out.println(num+"号玩家,已预备好,等候进入游戏");barrier.await();System.out.println(num+"号玩家,曾经进入游戏");}catch(InterruptedExceptione){e.printStackTrace();}catch(BrokenBarrierExceptione){e.printStackTrace();}});}executorPool.shutdown();

版权信息Copyright © 银河官网 版权所有    ICP备案编号:鲁ICP备09013610号