java并发关键字之CyclicBarrier

基本概念

CyclicBarrier(循环屏障)是一个同步工具,可以实现一组线程等待至某个状态后再全部同时执行。在所有等待线程都被释放之后, Cyclicbarrier可以被重用。Cyclicbarrier的运行状态叫做Barrier状态,在调用await方法后,线程就处于Barrier状态.

重要的方法await()方法介绍

  1. public int await() :挂起当前线程知道所有的线程都为 Barrier状态再同时执行后续的代码.
  2. public int await(long timeout , TimeUnit unit):设置一个超时时间,在超时时间过后,如果还有线程未达到Barrier状态,则不再等待,让达到Barrier状态的线程继续执行后续的任务.

具体使用方法如下:

public static void main(String[] args) {
        int N=4;
        //定义cyclicBarrier
        CyclicBarrier cyclicBarrier = new CyclicBarrier(N);
        for (int i = 0; i < N; i++) {
                 new MyThread(cyclicBarrier).start();
        }
    }
    //定义业务线程
   static    class MyThread extends  Thread{
        private CyclicBarrier cyclicBarrier;
        public MyThread(CyclicBarrier cyclicBarrier)
        {
            this.cyclicBarrier=cyclicBarrier;
        }

       @Override
       public void run() {
           try {
               Thread.sleep(5000);
               System.out.println("线程准备工作完成,等待其他线程");
               //等待其他线程也成为了Barrier状态
               cyclicBarrier.await();
               //另外一个await 可以设置等待时间
            //   cyclicBarrier.await(1000, TimeUnit.SECONDS);
           } catch (Exception e) {
               e.printStackTrace();
           }
           System.out.println("所有线程执行完毕,执行剩下的内容");
       }
   }

以上代码先定义了一个 Cyclicbarrier,然后循环启动了多个线程,每个线程都通过构造函数将 Cyclic Barrier传线程中,在线程内部开始执行第1阶段的工作,比如查询数据等;第1阶段的工作处理完成后,再调用 cyclicbarrier. await方法等待其他线程也完成第1阶段的工作( Cyclic Barrier让一组线程等待到达某个状态再一起执行);等其他线程也执行完第1阶段的工作后,便可执行并发操作的下一项任务,比如数据分发等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值