java多线程系列9 高级同步工具(3) CyclicBarrier
CyclicBarrier
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point) 然后一再执行
public class CyclicBarrierTest {
     public static void main(String[] args) {
    	 ExecutorService pool = Executors.newFixedThreadPool(3);
    	 //这里定义的是3 也就是必须三个线程中 都调用了barrier.await()方法才可以执行await后面的代码 不然一直等待
    	 CyclicBarrier barr = new CyclicBarrier(3);
    	pool.submit( new Thread(new Runner(barr, "c1")));
    	pool.submit( new Thread(new Runner(barr, "c2")));
    	pool.submit( new Thread(new Runner(barr, "c3")));
    	 pool.shutdown();
	}
}
class Runner implements Runnable{
	private   CyclicBarrier barrier ;
	private String name ;
	public Runner(CyclicBarrier barrier, String name) {
		super();
		this.barrier = barrier;
		this.name = name;
	}
	@Override
	public void run() {
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
		System.out.println(name+" 准备 ");
		try {
			 // await方法,在所有参与者都已经在此 barrier 上调用 await 方法之前,将一直等待。
			barrier.await();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println(name+" go ");
	}
 }
运行结果如下
  
在这里 需要说下和CountDownLatch的区别
CountDownLatch 阻塞的是 主线程
CyclicBarrier 阻塞的是子线程
CountDownLatch是不能够重用的,而CyclicBarrier是可以重用的。
java多线程系列9 高级同步工具(3) CyclicBarrier的更多相关文章
- java多线程系列7 高级同步工具(1)信号量Semaphore
		
Semaphore叫做信号量 可以控制某个资源可被同时访问的个数, acquire() 获取一个许可,得到许可才能执行后面的代码,如果没有就等待. release() 释放一个许可. 当信号量的只允许 ...
 - java多线程系列8 高级同步工具(2)CountDownLatch
		
CountDownLatch,计数器的初始值为线程的数量.每当一个线程完成了自己的任务后, 计数器的值就会减1.当计数器值到达0时,它表示所有的线程已经完成了任务, 然后在闭锁上等待的线程就可以恢复执 ...
 - Java核心知识点学习----线程同步工具类,CyclicBarrier学习
		
线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发. 1 ...
 - java多线程系列3-线程同步
		
如果一个资源被多个线程同时访问,可能会遭到破坏,这篇文章介绍java线程同步来解决这类问题 引入问题 某电影院目前正在上映贺岁大片,共有100张票,而它有3个售票窗口售票,请设计一个程序模拟该电影院售 ...
 - JAVA多线程提高九:Semaphere同步工具
		
java 中Semaphere可类比操作系统信号量,硬件资源如IO.内存.磁盘等都是有固定量的,多个程序需要竞争这些资源,没有资源就需要被挂起. 一.类和方法摘要 构造函数: public Semap ...
 - JAVA多线程提高十四:同步工具Exchanger
		
Exchanger可以在对中对元素进行配对和交换的线程的同步点.每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象.Exchanger 可能被视 ...
 - java多线程系列  目录
		
Java多线程系列1 线程创建以及状态切换 Java多线程系列2 线程常见方法介绍 Java多线程系列3 synchronized 关键词 Java多线程系列4 线程交互(wait和 ...
 - java多线程系列8-线程的优先级
		
在java中设置线程优先级使用setPriority,在jdk中的源代码如下: public final void setPriority(int newPriority) { ThreadGroup ...
 - Java 并发包中的高级同步工具
		
Java 并发包中的高级同步工具 Java 中的并发包指的是 java.util.concurrent(简称 JUC)包和其子包下的类和接口,它为 Java 的并发提供了各种功能支持,比如: 提供了线 ...
 
随机推荐
- git tag 常用操作
			
1.获取最新tag(获取不到就多获取几次) git fetch origin 或者 git fetch origin <tagname> 2. checkout tag到本地分支(如果看 ...
 - 知识点:Mysql 基本用法之流程控制
			
流程控制 一. 条件语句 if 语句实例: delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = ...
 - 执行webpack-dev-server时,提示端口被占用。
			
执行webpack-dev-server时总出错,提示端口被占用.百度了很多答案都不能解决,最后找到了解决方案,如下: webpack-dev-server --port 8088 使用以上命令修改 ...
 - dubbo文档
			
Srping版Dubbo集成中文地址: https://dubbo.gitbooks.io/dubbo-user-book/content/preface/background.html Spring ...
 - Java锁----Lock实现原理
			
转载. https://blog.csdn.net/wl6965307/article/details/51249156 Lock完全用Java写成,在java这个层面是无关JVM实现的. 在java ...
 - 学习excel的使用技巧二批量复制
			
1 选中要操作的部分 2 CTRL+G 打开定位 3 点击 定位条件 4 选择空值 5 输入=号 然后键盘的 方向键 向上 6 按住CTRL+回车 即可实现 批量复制
 - SQL 查询数据库中包含指定字符串的相关表和相关记录
			
declare @str varchar(100)set @str='我要找的' --要搜索的字符串 declare @s varchar(8000)declare tb cursor local f ...
 - 深度学习原理与框架-递归神经网络-时间序列预测(代码)  1.csv.reader(进行csv文件的读取)  2.X.tolist(将数据转换为列表类型)
			
1. csv.reader(csvfile) # 进行csv文件的读取操作 参数说明:csvfile表示已经有with oepn 打开的文件 2. X.tolist() 将数据转换为列表类型 参数说明 ...
 - TensorFlow学习之二
			
二.常用操作符和基本数学函数 大多数运算符都进行了重载操作,使我们可以快速使用 (+ - * /) 等,但是有一点不好的是使用重载操作符后就不能为每个操作命名了. 1 算术操作符:+ - * / % ...
 - ansible 问题
			
如下图,A服务器上用普通账号ansible有时就会报错,但有时却又正常,可以连接成功,用root账号执行ansible就完全没问题. 仅仅是这一台服务器有问题,其他都完全正常..ansible 文件删 ...