Java中关于CyclicBarrier的使用
CyclicBarrier工具类主要是控制多个线程的一起执行,CyclicBarrier 实例可以多次使用。
演示程序:
import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier; /**
*
* CyclicBarrier和CountDownLatch功能类似,都可以用作在所有线程都做好准备(比如赛跑:
* 每一个运动员可以认为是一个线程,只有当所有运动员做好准备才能鸣枪开始跑)之后一起触发运行。 <br>
* <br>
* 但是也有区别:<br>
* 1:CountDownLatch(初始值为线程个数)需要每当一个线程准备好之后,调用一下countDown方法,告诉CountDownLatch又有一个线程已经完成准备,当CountDownLatch值为0时候则触发所有线程一起执行<br>
* 2:CyclicBarrier(初始值为线程个数)需要每当一个线程准备好之后运行时候会阻塞在await处,当所有线程都阻塞在await处时候,即可触发所有线程执行。(CyclicBarrier:可以循环使用,每当触发完毕一次之后还可以
* 再次使用该CyclicBarrier的实例对象)
*/
public class CyclicBarrierDemo { public static void main(String[] args) throws Exception {
/**
* 重复使用的CyclicBarrier对象实例
*/
CyclicBarrier c = new CyclicBarrier(3); startThread(c); //第一次使用CyclicBarrier示例
Thread.sleep(5 * 1000);
startThread(c);
Thread.sleep(5 * 1000);
startThread(c); } /**
*
* @param c 重复使用的CyclicBarrier对象实例
*/
public static void startThread(CyclicBarrier c) { Thread t1 = newThread("t1", c);
Thread t2 = newThread("t2", c);
Thread t3 = newThread("t3", c);
t1.start();
t2.start();
t3.start();
} public static Thread newThread(final String threadName, final CyclicBarrier c) { return new Thread(new Runnable() { @Override
public void run() {
try {
int time = new Random().nextInt(3);
System.out.println(threadName + " sleep " + time + "秒 。");
Thread.sleep(time * 1000);
c.await(); //当所有线程都阻塞在此处时候触发所有线程执行
System.out.println(threadName + " is running .");
} catch (InterruptedException | BrokenBarrierException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}, threadName);
} }
Java中关于CyclicBarrier的使用的更多相关文章
- Java中CountDownLatch和CyclicBarrier的使用和比较
CountDownLatch和CyclicBarrier同为Java1.5开始引入的,应用于多线程编程中的一种工具,二者用途十分相近,十分容易混淆. CountDownLatch CountDownL ...
- Java中的4个并发工具类 CountDownLatch CyclicBarrier Semaphore Exchanger
在 java.util.concurrent 包中提供了 4 个有用的并发工具类 CountDownLatch 允许一个或多个线程等待其他线程完成操作,课题点 Thread 类的 join() 方法 ...
- java中CyclicBarrier简单入门使用
一个同步辅助类,它同意一组线程互相等待,直到到达某个公共屏障点 (common barrier point). 在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待.此时 CyclicBarr ...
- JAVA中的CountDownLatch、CyclicBarrier、Semaphore的简单测试
因公司需要做一个对于CountDownLatch的分享,特写了此blog. 具体细节可以参见:小结java自带的跟锁相关的一些类 在做这个分享的过程中发现了Main和junit的运行的区别,在另外一个 ...
- Java中的并发工具类:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 一. ...
- Java 并发编程中的 CyclicBarrier 用于一组线程互相等待
Java 5 引入的 Concurrent 并发库软件包中的 CyclicBarrier 是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point) ...
- java中CyclicBarrier的使用
文章目录 CyclicBarrier的方法 CyclicBarrier的使用 java中CyclicBarrier的使用 CyclicBarrier是java 5中引入的线程安全的组件.它有一个bar ...
- JAVA并发,CyclicBarrier
CyclicBarrier 翻译过来叫循环栅栏.循环障碍什么的(还是有点别扭的.所以还是别翻译了,只可意会不可言传啊).它主要的方法就是一个:await().await() 方法没被调用一次,计数便会 ...
- Java并发之CyclicBarrier、CountDownLatch、Phaser
在Java多线程编程中,经常会需要我们控制并发流程,等其他线程执行完毕,或者分阶段执行.Java在1.5的juc中引入了CountDownLatch和CyclicBarrier,1.7中又引入了Pha ...
随机推荐
- WebForm 【Repeater】展示数据
在 Webform 数据展示中 界面层 : HTLM 业务逻辑层 :只能用 C# Repeater 重复器 能够用来循环展示数据 具有5种模板 HeaderTemplat ...
- [PHP] 算法-两个n位的二进制整数相加问题PHP实现
两个n位二进制数分别存储在两个n元数组A和B中,这两个整数的和存在一个n+1元的数组C中答:此问题主要是考察相加进位的问题,元素1+1 =0 并且往前进一位ADD-BINARY(A,B) C=new ...
- minitab 转换语言
在使用minitab的时候,我们会以中文版熟悉界面,但是我们在实际操作的时候就要使用英文版的功能. 那么如何改变其语言环境呢. 很简单: 工具->选项->语言
- WPF通过附加属性控制窗口关闭
场景1 当使用 ShowDialog() 方式显示窗口时,通过定义附加属性的方式可实现在 ViewModel 中进行数据绑定(bool?)来控制子窗口的显示和关闭 public class ExWin ...
- RyuJIT的华丽转身【译文】
2018-06-19 RyuJIT是作为.NET即时编译器的代号称谓,它是.NET运行时的基本组件之一.与此相反的是,Roslyn作为C#编译器,其编译C#代码成为IL字节码.然后,其再将IL字节码编 ...
- JS如何判断一个对象是否为空、是否有某个属性
一.js判断一个对象是否为空 方法一: let obj1 = {} let obj2 = {a:1} function empty(obj){ for (let key in obj){ return ...
- 微信小程序地图报错——ret is not defined
刚刚在使用微信的map做地图时候 发现如下报错: 后来找了一会发现错误为经纬度写反了导致经纬度超出了范围 正确取值范围: latitude 纬度 浮点数,范围 -90 ~ 90 longitud ...
- 安卓开发_浅谈主配置文件(AndroidManifest.xml)
AndroidManifest.xml本质:是整个应用的主配置清单文件包含:该应用的包名,版本号,组件,权限等信息作用:记录该应用的相关的配置信息 一.常用标签(1).全局篇(包名,版本信息)(2). ...
- 修复cocos2dx的Label,WP8下不能换行的问题
注:2014年12月23日有内存/性能优化更新,内容在下面分割线后 搞了几个小时,这个头疼的问题,我给出代码吧. 找到 libcocos2d/platform/winrt/CCFreeTypeFont ...
- 【Java入门提高篇】Day23 Java容器类详解(六)HashMap源码分析(中)
上一篇中对HashMap中的基本内容做了详细的介绍,解析了其中的get和put方法,想必大家对于HashMap也有了更好的认识,本篇将从了算法的角度,来分析HashMap中的那些函数. HashCod ...