CyclicBarrier的使用
来源:互联网 发布:org.apache.shiro 编辑:程序博客网 时间:2024/04/30 05:54
CyclicBarrier把所有的线程都阻塞在一个阀门位置cyclicbarrier.awaite(),然后等到等待的线程数到达预设的值,就打开这个阀门。记得是阻塞线程,不是阻塞操作,在同一个线程使劲掉await是没什么效果的。
public class CyclicBarrierTest{ private final int STUDENT_COUNT = 10; private final CyclicBarrier cb = new CyclicBarrier(STUDENT_COUNT, new Runnable() { @Override public void run() { System.out.println("人到齐了,开门...."); } }); public void goHome() throws InterruptedException, BrokenBarrierException{ System.out.println(Thread.currentThread().getName()+"已刷卡,等待开门回家~"); cb.await(); System.out.println(Thread.currentThread().getName() + "放学回家~"); } public static void main(String[] args) { CyclicBarrierTest ct = new CyclicBarrierTest(); for(int i =0;i<ct.STUDENT_COUNT;i++){ new Thread("学生"+i+" "){ @Override public void run() { try { ct.goHome(); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } } }.start(); } }}
package com.zhy.concurrency.cyclic; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * 改造后的门禁系统 * * @author zhy * */ public class CyclicBarrierTest23 { /** * 学生总数 */ private final int STUDENT_COUNT = 12; /** * 每3个人一组出门 */ final CyclicBarrier barrier = new CyclicBarrier(2, new Runnable() { @Override public void run() { System.out.println("有2个学生到齐了,放行...."); } }); public void goHome() throws InterruptedException, BrokenBarrierException { System.out.println(Thread.currentThread().getName() + "已刷卡,等待开门回家~"); barrier.await(); } public static void main(String[] args) throws InterruptedException, BrokenBarrierException { final CyclicBarrierTest23 instance = new CyclicBarrierTest23(); /** * 每个线程代表一个学生 */ for (int i = 0; i < instance.STUDENT_COUNT; i++) { new Thread("学生" + i +" " ) { public void run() { try { Thread.sleep(1000); instance.goHome(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } }; }.start(); } } }
0 0
- CyclicBarrier的使用
- CyclicBarrier的使用
- CyclicBarrier的使用
- CyclicBarrier计数器的使用
- CyclicBarrier的使用
- CyclicBarrier 栅栏的使用
- Java CyclicBarrier的使用
- CyclicBarrier的介绍和使用
- java并发:CyclicBarrier的使用
- CyclicBarrier 高并发的使用
- CyclicBarrier使用
- CyclicBarrier使用
- jdk的CountdownLatch和CyclicBarrier的使用
- 《Java核心技术》读书笔记:CyclicBarrier的使用示例
- 《黑马程序员》 CyclicBarrier的使用练习
- Java多线程之~~~CyclicBarrier 类的使用
- Java并发编程之CyclicBarrier的使用
- java再复习-CyclicBarrier的使用
- 设计模式详解(总纲)
- iOS 10 的适配问题
- GBT28181开发:SIP协议实践 之PTZ指令详解
- 9-调用门(无参)
- 全志a20 fastboot烧写system.img时出现 data too large 错误
- CyclicBarrier的使用
- 在子控件类中获取该控件所在的ViewController
- 鼠标移上去的样式
- android自定义选择开关switchButon
- 根据后台返回的日期排序数据
- salesforce开发2---sObject创建(salesforce中的表创建)
- php curl获取https页面内容, 不直接输出返回结果的设置
- 深究JavaScript——slice/splice/substring/substr
- 追着嘟嘟学c#系列入门第四篇-----c#的运算符和表达式【蓝鸥出品】