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
    评论
学习Java并发编程是一项需要投入大量时间和精力的任务,但它在现代软件开发中是不可或缺的。通过深入学习线程、同步和异步、互斥和死锁、线程安全性、并发编程模型以及Java并发包等内容,您可以成为一名更加优秀的编程专家。 对于初学者来说,Java并发编程可能会显得晦涩难懂,并且涉及了许多新技术。在学习这一领域之前,建议掌握好相关的理论知识,并打好基础。只有在掌握了基础知识后,才能更好地理解和应用更高层次的概念。 在进行Java并发编程的训练时,以下是一些建议: 1. 了解并掌握Java中的线程机制和线程生命周期。 2. 学习如何使用同步和异步机制来处理并发编程中的数据共享和通信问题。 3. 理解并学习如何使用锁、互斥和死锁的概念以及如何避免它们。 4. 熟悉线程安全性的概念和相关的技术,如volatile关键字和Atomic类。 5. 学习并理解Java提供的并发编程模型,如线程池和Fork/Join框架。 6. 了解并掌握Java并发包中提供的各种类和工具,如Semaphore、CountDownLatch和CyclicBarrier等。 通过不断学习和练习,并发编程的技能会得到提升。建议您多实践编写并发程序,通过解决实际问题来加深对并发编程的理解。祝您在学习Java并发编程的过程中取得成功!<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* *2* [如何学习Java并发编程](https://blog.csdn.net/weixin_42080277/article/details/129785094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值