CyclicBarrier的用法

简介: 多个线程在指定的集合点(屏障点)等待集合后在继续去下一个集合点import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CyclicBarrierTest {   

多个线程在指定的集合点(屏障点)等待集合后在继续去下一个集合点

import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class CyclicBarrierTest {

    public static void main(String[] args) {
        ExecutorService service = Executors.newCachedThreadPool();
        final  CyclicBarrier cb = new CyclicBarrier(3);//设置等待到达的线程数目
        Runnable runnable = new Runnable(){
            public void run(){
            try {
                Thread.sleep((long)(Math.random()*10000));    
                System.out.println("线程" + Thread.currentThread().getName() + 
                        "即将到达集合地点1,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达,"+(cb.getNumberWaiting()==2?"都到齐了继续走呀":"正在等候"));                        
                cb.await();//到此如果没有达到公共屏障点,则该线程处于等待状态,如果达到公共屏障点则所有处于等待的线程都继续往下运行
                
                Thread.sleep((long)(Math.random()*10000));    
                System.out.println("线程" + Thread.currentThread().getName() + 
                        "即将到达集合地点2,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达,"+(cb.getNumberWaiting()==2?"都到齐了继续走呀":"正在等候"));                  
                cb.await();    
                Thread.sleep((long)(Math.random()*10000));    
                System.out.println("线程" + Thread.currentThread().getName() + 
                        "即将到达集合地点3,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达,"+(cb.getNumberWaiting()==2?"都到齐了继续走呀":"正在等候"));                  
                cb.await();                        
            } catch (Exception e) {
                e.printStackTrace();
            }                
        }
    };
        for(int i=0;i<3;i++){        
            service.execute(runnable);
        }
        service.shutdown();
    }
}


本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1716837

目录
相关文章
|
机器学习/深度学习 人工智能 供应链
AI在各行业的具体应用与未来展望
人工智能(Artificial Intelligence, AI)作为一项颠覆性技术,正在逐步改变我们的生活和工作方式。从语音助手到自动驾驶汽车,AI的应用已经深入到各个领域。本文将详细探讨AI在不同行业中的具体应用,以及未来可能的发展方向。
3881 6
|
9月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
小程序 开发者
微信小程序之网络数据请求 wx:request的简单使用
这篇文章介绍了微信小程序中如何使用wx.request进行网络数据请求,包括请求的配置、请求的格式以及如何在开发阶段关闭请求的合法检验。
微信小程序之网络数据请求 wx:request的简单使用
阿里云商标申请注册新手教程(一步步详细操作)
阿里云商标注册流程,新手快速注册商标流程,阿里云商标注册分为智能注册申请、顾问注册和安心注册:顾问注册和安心注册会有阿里云商标顾问提供一对一服务,所以价格相对智能注册要贵一些,智能注册价格275元、商标顾问注册申请680元、商标安心注册申请1580元,安心注册比顾问注册多了一个不成功全额退款服务,所以安心注册费用相对更高一些。
1774 0
阿里云商标申请注册新手教程(一步步详细操作)
|
Java Spring
深入解析Spring源码,揭示JDK动态代理的工作原理。
深入解析Spring源码,揭示JDK动态代理的工作原理。
230 0
|
设计模式 安全 Java
|
存储 安全 数据安全/隐私保护
配置本地安全策略(二)
配置本地安全策略(二)
441 0
|
存储 安全 算法
Java并发编程之ConcurrentHashMap源码分析
HashMap多线程put后get为null和多线程put的时候可能导致元素丢失 在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用ConcurrentHashMap代替HashMap
502 0
Java并发编程之ConcurrentHashMap源码分析
|
安全 Java 测试技术
Spring Security系列教程02--初识Spring Security
在开始学习Spring Security系列教程之前,一一哥 先带大家来了解一下Spring Security,看看它到底是什么,有哪些功能,有什么特点,以及它与别的同类框架相比,有什么不同,我们以后学习任何一个新技术,其实都可以遵循"3W1H"法则,这样学习起来才能更有条理。 首先请各位跟着 一一哥 来了解一下 Spring Security的概念,我们得先知道要学习的是个什么东西,以后我们出去面试的时候,面试官可能会问你,"请你介绍一下Spring Security",那么答案其实就是这个概念了。
371 1