java线程并发cyclicbarrier类使用示例
packagecom.yao;
importjava.util.Random;
importjava.util.concurrent.CyclicBarrier;
/**
*CyclicBarrier类似于CountDownLatch也是个计数器,
*不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数,
*当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续。
*CyclicBarrier就象它名字的意思一样,可看成是个障碍,
*所有的线程必须到齐后才能一起通过这个障碍。
*CyclicBarrier初始时还可带一个Runnable的参数,
*此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。
*/
publicclassCyclicBarrierTest{
publicstaticclassComponentThreadimplementsRunnable{
CyclicBarrierbarrier;//计数器
intID; //组件标识
int[]array; //数据数组
//构造方法
publicComponentThread(CyclicBarrierbarrier,int[]array,intID){
this.barrier=barrier;
this.ID=ID;
this.array=array;
}
publicvoidrun(){
try{
array[ID]=newRandom().nextInt(100);
System.out.println("Component"+ID+"generates:"+array[ID]);
//在这里等待Barrier处
System.out.println("Component"+ID+"sleep...");
barrier.await();
System.out.println("Component"+ID+"awaked...");
//计算数据数组中的当前值和后续值
intresult=array[ID]+array[ID+1];
System.out.println("Component"+ID+"result:"+result);
}catch(Exceptionex){
}
}
}
/**
*测试CyclicBarrier的用法
*/
publicstaticvoidtestCyclicBarrier(){
finalint[]array=newint[3];
CyclicBarrierbarrier=newCyclicBarrier(2,newRunnable(){
//在所有线程都到达Barrier时执行
publicvoidrun(){
System.out.println("testCyclicBarrierrun...");
array[2]=array[0]+array[1];
}
});
//启动线程
newThread(newComponentThread(barrier,array,0)).start();
newThread(newComponentThread(barrier,array,1)).start();
}
publicstaticvoidmain(String[]args){
CyclicBarrierTest.testCyclicBarrier();
}
}
相关文章
- java double转decimal_Java中Double与BigDecimal的相互转换
- java线程池的面试题_献给准备面试的你,Java线程and线程池面试题小结「建议收藏」
- java pfx 证书_Java将pfx证书转换为jks[通俗易懂]
- java启动器_JAVA基础:Java 启动器如何查找类
- java工作流_Java 实现简单工作流
- java课设_Java 课设
- 深入讲解java多线程与高并发:线程池ThreadPool
- java并发编程实战wwj———————-第一阶段————–27-28-29-30
- 并发多线程学习(六)Java线程间的通信
- 【深入浅出Java原理及实战】「并发编程系列」深入分析线程池的工作原理(上篇)
- c 线程安全的单例模式-c多线程并发处理方式_Java多线程面试题:线程锁+线程池+线程同步等
- Java 并发编程之Semaphore详解
- https://haobin.work/2021/04/30/并发/Java线程池异常处理/
- 【Java并发编程】- 02 线程池总结
- 【Java 并发编程】线程简介 ( 进程与线程 | 并发概念 | 线程间通信 | Java 并发 3 特性 )
- 【Java 并发编程】线程简介 ( 原子操作 | volatile 关键字使用场景 )
- 【Java 并发编程】线程共享变量可见性 ( volatile 关键字使用场景分析 | MESI 缓存一致性协议 | 总线嗅探机制 )
- 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )
- java线程池和并发集合(二)
- java并发编程(2):Java多线程-java.util.concurrent高级工具
- Java多线程与并发模型之锁详解编程语言
- Java线程新特征——Java并发库详解编程语言
- Java操作MySQL数据库:实现看似不可能的梦想(java连接mysql数据库)
- 使用Java实现Redis数据存储(redis集成java)
- Java轻松处理Redis缓存(java处理redis)
- 利用Redis锁实现Java程序并发控制(redis锁java实现)
- java线程并发countdownlatch类使用示例
- Java并发编程示例(一):线程的创建和执行
- Java并发编程示例(二):获取和设置线程信息
- Java并发编程示例(五):线程休眠与恢复