「java.util.concurrent并发包」之 CyclicBarrier
一 描述
CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。
CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。
CyclicBarrier初始时还可带一个Runnable的参数, 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。
二 代码实例
 public class CyclicBarrierDemo {
     private static final int THREAD_NUM = 5;
     public static class WorkerThread implements Runnable {
         CyclicBarrier barrier;
         public WorkerThread(CyclicBarrier b) {
             this.barrier = b;
         }
         public void run() {
             try {
                 System.out.println("Worker's waiting");
                 //线程在这里等待,直到所有线程都到达barrier
                 barrier.await();
                 System.out.println("ID:" + Thread.currentThread().getId() + " Working");
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
     }
     public static void main(String[] args) {
         //当所有线程到达barrier时执行
         CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, () -> System.out.println("Inside Barrier"));
         for (int i = 0; i < THREAD_NUM; i++) {
             new Thread(new WorkerThread(cb)).start();
         }
     }
 }
输出结果
Worker's waiting
Worker's waiting
Worker's waiting
Worker's waiting
Worker's waiting
Inside Barrier
ID: Working
ID: Working
ID: Working
ID: Working
ID: Working
「java.util.concurrent并发包」之 CyclicBarrier的更多相关文章
- 「java.util.concurrent并发包」之 ThreadPoolExecutor
		一 异步用new Thread? 大写的"low"!! new Thread(new Runnable() { @Override public void run() { // T ... 
- 「java.util.concurrent并发包」之 CountDownLatch
		一 CountDownLatch是什么 CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier.Semaphore.ConcurrentHas ... 
- 「java.util.concurrent并发包」之 CopyOnWrite
		一 CopyOnWrite容器概述 Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容C ... 
- 「java.util.concurrent并发包」之 ReentrantReadWriteLock
		一 引言 在多线程的环境下,对同一份数据进行读写,会涉及到线程安全的问题.比如在一个线程读取数据的时候,另外一个线程在写数据,而导致前后数据的不一致性:一个线程在写数据的时候,另一个线程也在写,同样也 ... 
- 「java.util.concurrent并发包」之 CAS
		一 引言 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能 ... 
- Java并发:多线程和java.util.concurrent并发包总结
		多线程和java.util.concurrent并发包 转载: 
- Java并发—java.util.concurrent并发包概括(转载)
		一.描述线程的类:Runable和Thread都属于java.lang包 二.内置锁synchronized属于jvm关键字,内置条件队列操作接口Object.wait()/notify()/noti ... 
- java.util.concurrent并发包诸类概览
		java.util.concurrent包的类都来自于JSR-166:Concurrent Utilities,官方的描述叫做“The JSR proposes a set of medium-lev ... 
- java多线程---------java.util.concurrent并发包----------等待多线程完成
		一.等待多线程完成的join的使用.CoundownLantch.CyclicBarrier . 
随机推荐
- Java进阶知识15 Spring的基础配置详解
			1.SSH各个的职责 Struts2:是web框架(管理jsp.action.actionform等).Hibernate:是ORM框架,处于持久层.Spring:是一个容器框架,用于配置bean,并 ... 
- windbg双机调试配置[转]
			原文 windbg已不提供单独下载,wdk驱动开发工具包里附带有这个调试器.官网提供下载: http://msdn.microsoft.com/en-us/windows/hardware/gg487 ... 
- luogu4930
			P4930 「FJ2014集训」采药人的路径 题目描述 采药人的药田是一个树状结构,每条路径上都种植着同种药材.采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性的,一种是阳 ... 
- Java中String、StringBuffer、StringBuilder
			String 对象 String 创建机制 String 是 Java 语言中非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑,由源码可知,它是典型的 Immutable (不可变)类,被fi ... 
- Apache搭建简单的图片访问服务器
			安装apache后,修改httpd.conf文件 将根目录修改为你图片所在目录 DocumentRoot有这么一行,修改成你要指向的路径 DocumentRoot "/yang/pic&qu ... 
- Python2.x 里解决中文编码的万能钥匙
			注意: Python2.x默认编码环境是ASCII,当和取回的数据编码格式不一致时,可能会造成乱码:我们可以指定保存内容的编码格式,一般情况下,我们可以在代码最上方添加 import sys relo ... 
- myeclipse使用SVN分支与合并详解
			此博文主要内容来源地址:https://blog.csdn.net/liuyifeng1920/article/details/53118183,感谢原创博主: 先介绍一下svn的两种开发和发布的规范 ... 
- 让一个小的div在大的div中居中显示
			原文 实现原理是设置margin自动适应,然后设置定位的上下左右都为0. 就如四边均衡受力从而实现盒子的居中: 代码: .parent { width:800px; height:500px; bor ... 
- Phos 技术服务支持
			Phos Mail: tencenter@163.com 
- Qt 字符串QString arg()用法总结
			1.QString::arg()//用字符串变量参数依次替代字符串中最小数值 QString i = "iTest"; // current file's nu ... 
