美文网首页
CyclicBarrier

CyclicBarrier

作者: 躬行者_白 | 来源:发表于2018-05-17 16:12 被阅读0次

            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参数。

    相关文章

      网友评论

          本文标题:CyclicBarrier

          本文链接:https://www.haomeiwen.com/subject/xoebdftx.html