码迷,mamicode.com
首页 > 其他好文 > 详细

CountDownLatch与CyclicBarrier

时间:2019-07-30 21:43:04      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:构造方法   bar   任务   比较   调用   wait   重置   inter   相等   

CountDownLatch

倒数计数器 一个线程等待其他所有线程

 一.CountDownLatch用法

CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。

  • await() throws InterruptedException:调用该方法的线程等到构造方法传入的N减到0的时候,才能继续往下执行;
  • await(long timeout, TimeUnit unit):与上面的await方法功能一致,只不过这里有了时间限制,调用该方法的线程等到指定的timeout时间后,不管N是否减至为0,都会继续往下执行;
  • countDown():使CountDownLatch初始值N减1;
  • long getCount():获取当前CountDownLatch维护的值;

Cyclicbarrier 循环栅栏

CountDownLatch只有一次计数 ,

而Cyclicbarrier多次循环计数

//等到所有的线程都到达指定的临界点
await() throws InterruptedException, BrokenBarrierException
//与上面的await方法功能基本一致,只不过这里有超时限制,阻塞等待直至到达超时时间为止
await(long timeout, TimeUnit unit) throws InterruptedException, BrokenBarrierException, TimeoutException
//获取当前有多少个线程阻塞等待在临界点上
int getNumberWaiting()
//用于查询阻塞等待的线程是否被中断
boolean isBroken()
//将屏障重置为初始状态。如果当前有线程正在临界点等待的话,将抛出
BrokenBarrierException。 void reset()
public CyclicBarrier(int parties, Runnable barrierAction)
barrierAction  当计数器一次计数完成后,系统会执行的动作
 

CountDownLatch与CyclicBarrier

  • CountDownLatch一般用于某个线程A等待若干个其他线程执行完任务之后,它才执行;而CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程再同时执行;CountDownLatch强调一个线程等多个线程完成某件事情。CyclicBarrier是多个线程互等,等大家都完成,再携手共进。
  • 调用CountDownLatch的countDown方法后,当前线程并不会阻塞,会继续往下执行;而调用CyclicBarrier的await方法,会阻塞当前线程,直到CyclicBarrier指定的线程全部都到达了指定点的时候,才能继续往下执行;
  • CountDownLatch方法比较少,操作比较简单,而CyclicBarrier提供的方法更多,比如能够通过getNumberWaiting(),isBroken()这些方法获取当前多个线程的状态,并且CyclicBarrier的构造方法可以传入barrierAction,指定当所有线程都到达时执行的业务功能;
  • CountDownLatch是不能复用的,而CyclicBarrier是可以复用的。
 

链接:https://juejin.im/post/5aeec3ebf265da0ba76fa327

CountDownLatch与CyclicBarrier

标签:构造方法   bar   任务   比较   调用   wait   重置   inter   相等   

原文地址:https://www.cnblogs.com/dingpeng9055/p/11272817.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!