CyclicBarrier

        CyclicBarrier是一个同步工具类,它允许一组线程在到达某个栅栏点(common barrier point)互相等待,发生阻塞,直到最后一个线程到达栅栏点,栅栏才会打开,处于阻塞状态的线程恢复继续执行。该栅栏还可以复用。

构造函数:

    public CyclicBarrier(int parties) {

        this(parties,null);

    }

    public CyclicBarrier(int parties, Runnable barrierAction) {

        if (parties <=0)throw new IllegalArgumentException();

        this.parties = parties;

        this.count = parties;

        this.barrierCommand = barrierAction;

    }

    parties:指定相互等待的线程的数量

    barrierAction:当所有线程到达栅栏后优先执行的函数。是新启的一个线程

if (index ==0) {// tripped

    boolean ranAction =false;

try {

        final Runnable command =barrierCommand;

        if (command !=null)

                command.run();//是新启的一个线程  ,执行任务

        ranAction =true;

        nextGeneration();

        return 0;

}finally {

if (!ranAction)

breakBarrier();

}

}

await():栅栏,等待

await(long timeout, TimeUnit unit)

    1、保证线程安全(保证线程)。

    2、获取到锁的线程,count-1,并且进入等待(condition.await() or condition.await(timeout))。

    3、当count等于0的时候,会唤醒所有等待的线程。其中 nextGeneration方法可以实现屏障的循环使用:重新生成Generation对象,恢复count值

    4、等待时间的参数用作condition 的await参数。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,Cycl...
    Pure_Dream阅读 1,511评论 0赞 3
  • CyclicBarrier 如果说CountDownLatch是一次性的,那么CyclicBarrier正好可以循...
    raincoffee阅读 649评论 0赞 1
  • 继续总结多线程同步常用的方法或者类,上一节介绍了CountDownLatch,这次介绍一下它的加强版本Cyclic...
    老肖79阅读 698评论 0赞 0
  • Tansy Wu/文 所谓流浪,滚滚红尘,天南地北随处而安。 愚人节在肯德基和男朋友准备尝尝他家新品—牛油果汉堡,...
    哈哈简阅读 368评论 0赞 0
  • 首先感谢自虐派:战狼小组 的 凤飞飞,我想对你说:你的话多是对我这样惰性强的人不断提醒;我要对自己说:成长是自己的...
    晓锋1043阅读 383评论 6赞 3

友情链接更多精彩内容