博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中关于CyclicBarrier的使用
阅读量:4565 次
发布时间:2019-06-08

本文共 2016 字,大约阅读时间需要 6 分钟。

CyclicBarrier工具类主要是控制多个线程的一起执行,CyclicBarrier 实例可以多次使用。

演示程序:

import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** *  * CyclicBarrier和CountDownLatch功能类似,都可以用作在所有线程都做好准备(比如赛跑: * 每一个运动员可以认为是一个线程,只有当所有运动员做好准备才能鸣枪开始跑)之后一起触发运行。 
*
* 但是也有区别:
* 1:CountDownLatch(初始值为线程个数)需要每当一个线程准备好之后,调用一下countDown方法,告诉CountDownLatch又有一个线程已经完成准备,当CountDownLatch值为0时候则触发所有线程一起执行
* 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); }}

 

转载于:https://www.cnblogs.com/leodaxin/p/7653192.html

你可能感兴趣的文章
Redis监控工具,命令和调优
查看>>
zabbix-mysql迁移分离
查看>>
jQuery调用WCF 说明
查看>>
算法第5章作业
查看>>
7.9 练习
查看>>
基于ArcGIS JS API的在线专题地图实现
查看>>
learnByWork
查看>>
Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法
查看>>
lua 函数
查看>>
Git的基本命令
查看>>
四平方和
查看>>
第十八周 12.27-1.2
查看>>
C# IP地址字符串和数值转换
查看>>
TCHAR和CHAR类型的互转
查看>>
常用界面布局
查看>>
C语言—— for 循环
查看>>
IBM lotus9.0测试版即将公测
查看>>
xml常用方法
查看>>
Cube Stacking(并差集深度+结点个数)
查看>>
AndroidStudio3更改包名失败
查看>>