Java多线程CyclicBarrier学习
来源:互联网 发布:千岛片淘宝购买 编辑:程序博客网 时间:2024/06/05 08:09
CyclicBarrier是多线程并发控制实用工具
- CyclicBarrier初始化时规定一个数目,然后调用await()方法进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续执行。
- await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程。当计数减至0时,阻塞解除,所有在此 CyclicBarrier 上面阻塞的线程开始运行。
- CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。
- CyclicBarrier可以接收一个参数作为barrierAction,就是当计数器一次计算完成后,程序会执行的动作。如果你想学习java可以来这个群,首先是五三二,中间是二五九,最后是九五二,里面有大量的学习资料可以下载。
- import java.util.concurrent.BrokenBarrierException;
- import java.util.concurrent.CyclicBarrier;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- /**
- *
- * @author InJavaWeTrust
- *
- */
- public class Orange {
- public static class PickOrange implements Runnable {
- private int i;
- private CyclicBarrier cb;
- public PickOrange(int i, CyclicBarrier cb) {
- this.i = i;
- this.cb = cb;
- }
- public void run() {
- try {
- pick();
- cb.await(); // 等待所有橘子采摘完毕
- box();
- cb.await(); // 等待所有橘子装箱完毕
- } catch (InterruptedException e) {
- e.printStackTrace();
- } catch (BrokenBarrierException e) {
- e.printStackTrace();
- }
- }
- public void pick() {
- System.out.println("采摘第" + i +"个橘子完成!");
- }
- public void box() {
- System.out.println("第" + i + "个橘子装箱完成!");
- }
- }
- public static void main(String[] args) {
- CyclicBarrier cb = new CyclicBarrier(5);
- ExecutorService exec = Executors.newFixedThreadPool(5);
- for (int i = 1; i <= 5; i++) {
- exec.submit(new Thread(new PickOrange(i, cb)));
- }
- exec.shutdown();
- }
- }
结果:
- 采摘第2个橘子完成!
- 采摘第1个橘子完成!
- 采摘第5个橘子完成!
- 采摘第4个橘子完成!
- 采摘第3个橘子完成!
- 第3个橘子装箱完成!
- 第2个橘子装箱完成!
- 第1个橘子装箱完成!
- 第5个橘子装箱完成!
- 第4个橘子装箱完成!
0 0
- Java多线程CyclicBarrier学习
- java多线程学习——CyclicBarrier
- JAVA多线程CyclicBarrier应用
- Java多线程之CyclicBarrier
- Java多线程之CyclicBarrier
- JAVA多线程之CyclicBarrier
- Java多线程之CyclicBarrier
- Java多线程之CyclicBarrier
- Java多线程之----CyclicBarrier
- Java多线程系列-CyclicBarrier
- Java多线程中的CyclicBarrier
- Java 多线程之CyclicBarrier
- java 多线程-障栅CyclicBarrier
- java多线程[7]:CyclicBarrier
- java多线程学习(一) 之 CountDownLatch和CyclicBarrier
- JAVA多线程之(CyclicBarrier)
- Java多线程技术之CyclicBarrier
- java中的多线程包---CyclicBarrier
- 阿里巴巴Java开发手册快速学习
- DEV XtraReport 动态构建报表之样式设计
- 致CIO:直面大数据时代,绕不开的微信钉钉
- 数字签名和报文摘要学习笔记
- maven配置国内镜像
- Java多线程CyclicBarrier学习
- win系统 怎么重新启动Apache
- SubVersion简要教程
- Install MongoDB Enterprise on Red Hat Enterprise or CentOS
- UNIX文件共享
- QT小程序:显示多边形
- FFMPEG结构体分析:AVFrame
- WebView实现js调用安卓虚拟机的系统相机
- 美化复选框(给复选框添加样式)