java多线程之CyclicBarrier的使用方法
作者:chuyouyinghe 时间:2023-11-04 21:52:54
java多线程之CyclicBarrier的使用方法
public class CyclicBarrierTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final CyclicBarrier cb = new CyclicBarrier(3);
for(int i=0;i<3;i++){
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();
}
}
};
service.execute(runnable);
}
service.shutdown();
}
}
运行结果如下:
线程pool-1-thread-3即将到达集合地点1,当前已有1个已经到达,正在等候
线程pool-1-thread-1即将到达集合地点1,当前已有2个已经到达,正在等候
线程pool-1-thread-2即将到达集合地点1,当前已有3个已经到达,都到齐了,继续走啊
线程pool-1-thread-3即将到达集合地点2,当前已有1个已经到达,正在等候
线程pool-1-thread-1即将到达集合地点2,当前已有2个已经到达,正在等候
线程pool-1-thread-2即将到达集合地点2,当前已有3个已经到达,都到齐了,继续走啊
线程pool-1-thread-1即将到达集合地点3,当前已有1个已经到达,正在等候
线程pool-1-thread-3即将到达集合地点3,当前已有2个已经到达,正在等候
线程pool-1-thread-2即将到达集合地点3,当前已有3个已经到达,都到齐了,继续走啊
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/chuyouyinghe/article/details/46700503
标签:java,多线程,CyclicBarrier
0
投稿
猜你喜欢
详解Spring的两种代理方式:JDK动态代理和CGLIB动态代理
2023-08-08 14:38:37
springboot 多数据源的实现(最简单的整合方式)
2022-08-20 02:30:11
java ReentrantLock条件锁实现原理示例详解
2023-12-12 02:36:13
c#图片缩放图片剪切功能实现(等比缩放)
2022-08-17 04:46:13
C#中流的使用和分类
2022-10-04 22:17:41
SpringBoot实现配置文件的替换
2023-11-21 22:27:16
详解Java中final的用法
2022-09-22 10:20:32
使用注解@Validated效验VO参数是否合规
2023-10-27 20:13:01
java 创建线程的方法总结
2023-02-25 20:20:30
Javaweb基础入门requse原理与使用
2021-10-07 20:55:29
Android AIDL和远程Service调用示例代码
2022-07-14 03:06:15
本地jvm执行flink程序带web ui的操作
2022-09-03 20:49:00
C#中事件只能在内部调用的原因分析
2023-08-09 05:07:00
C#中析构函数、Dispose、Close方法的区别
2022-06-11 21:20:54
java编程调用存储过程中得到新增记录id号的实现方法
2022-06-09 02:55:52
Maven引入外部jar的几种方法(小结)
2022-11-10 01:35:30
JavaWeb开发中alias拦截器的使用方法
2023-08-20 10:36:55
详解Java的文件与目录管理以及输入输出相关操作
2022-05-03 15:07:22
浅谈Android串口通讯SerialPort原理
2023-03-31 12:39:52
C#使用DropDownList绑定添加新数据的方法汇总
2023-05-08 03:20:56