Java并发– CyclicBarrier示例
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.logging.Level;
import java.util.logging.Logger;/**
* Java program to demonstrate how to use CyclicBarrier in Java. CyclicBarrier is a
* new Concurrency Utility added in Java 5 Concurrent package.
*
* @author Javin Paul
*/public class CyclicBarrierExample {//Runnable task for each thread
private static class Task implements Runnable {private CyclicBarrier barrier;public Task(CyclicBarrier barrier) {
this.barrier = barrier;
}@Override
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " is waiting on barrier");
barrier.await();
System.out.println(Thread.currentThread().getName() + " has crossed the barrier");
} catch (InterruptedException ex) {
Logger.getLogger(CyclicBarrierExample.class.getName()).log(Level.SEVERE, null, ex);
} catch (BrokenBarrierException ex) {
Logger.getLogger(CyclicBarrierExample.class.getName()).log(Level.SEVERE, null, ex);
}
}
}public static void main (String args[]) {//creating CyclicBarrier with 3 parties i.e. 3 Threads needs to call await()
final CyclicBarrier cb = new CyclicBarrier(3, new Runnable(){
@Override
public void run(){
//This task will be executed once all thread reaches barrier
System.out.println("All parties are arrived at barrier, lets play");
}
});//starting each of thread
Thread t1 = new Thread(new Task(cb), "Thread 1");
Thread t2 = new Thread(new Task(cb), "Thread 2");
Thread t3 = new Thread(new Task(cb), "Thread 3");t1.start();
t2.start();
t3.start();}
}
输出:
Thread 1 is waiting on barrier
Thread 3 is waiting on barrier
Thread 2 is waiting on barrier
All parties are arrived at barrier, lets play
Thread 3 has crossed the barrier
Thread 1 has crossed the barrier
Thread 2 has crossed the barrier
java.util.concurrent.BrokenBarrierException
at java.util.concurrent.CyclicBarrier.dowait(CyclicBarrier.java:172)
at java.util.concurrent.CyclicBarrier.await(CyclicBarrier.java:327)
参考: Javarevisited博客上的JCG合作伙伴 Javin Paul提供的Java 5中的CyclicBarrier示例–并发教程 。
翻译自: https://www.javacodegeeks.com/2012/08/java-concurrency-cyclicbarrier-example.html
Java并发– CyclicBarrier示例相关推荐
- cyclicbarrier_Java并发– CyclicBarrier示例
cyclicbarrier Java中的CyclicBarrier是JDK 5中在java.util.Concurrent包上引入的同步器,以及其他并发实用程序,例如Counting Semaphor ...
- java线程本地变量_Java并发编程示例(九):本地线程变量的使用
这篇文章主要介绍了Java并发编程示例(九):本地线程变量的使用,有时,我们更希望能在线程内单独使用,而不和其他使用同一对象启动的线程共享,Java并发接口提供了一种很清晰的机制来满足此需求,该机制称 ...
- java 并发实例_java一些常用并发工具示例
最近把<java并发编程实战>-Java Consurrency in Practice 重温了一遍,把书中提到的一些常用工具记录于此: 一.闭锁(门栓)- CountDownLatch ...
- java一些常用并发工具示例
最近把<java并发编程实战>-Java Consurrency in Practice 重温了一遍,把书中提到的一些常用工具记录于此: 一.闭锁(门栓)- CountDownLatch ...
- java并发编程代码示例_java并发编程之同步器代码示例
java并发编程之同步器代码示例 发布时间:2020-09-08 16:53:41 来源:脚本之家 阅读:58 作者:Blessing_H 同步器是一些使线程能够等待另一个线程的对象,允许它们协调动作 ...
- Java并发编程系列学习_CountDownLatch倒计时器CyclicBarrier循环栅栏
一.倒计时器CountDownLatch 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方 ...
- Java并发编程之CyclicBarrier详解
简介 栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生.栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行.闭锁用于等待事件,而栅栏用于等待其他线程. CyclicBarrier ...
- 【Java 并发编程】线程池机制 ( 线程池示例 | newCachedThreadPool | newFixedThreadPool | newSingleThreadExecutor )
文章目录 前言 一.线程池示例 二.newCachedThreadPool 线程池示例 三.newFixedThreadPool 线程池示例 三.newSingleThreadExecutor 线程池 ...
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
2019独角兽企业重金招聘Python工程师标准>>> Java并发编程:CountDownLatch.CyclicBarrier和Semaphore 在java 1.5中,提供了一 ...
最新文章
- 高性能Linux服务器运维实战,《高性能Linux服务器构建实战》笔记
- Spring事务--笔记
- 06:甲流疫情死亡率
- ECCV 2020《TRRNet: Tiered Relation Reasoning for Compositional Visual Question Answering》论文笔记
- Java中intern()方法的作用
- 公钥加密以及混合加密
- 如何实现场景切换的java_JavaFX + Scene Builder如何切换场景(JavaFX + Scene Builder how switch scene)...
- django解决:ModuleNotFoundError: No module named ‘django.core.urlresolvers‘
- php微信公众号测试号token配置失败,微信公众号Token配置失败解决办法
- 如何在 NVIDIA GPU、CUDA 和 cuDNN 中使用 OpenCV 的“dnn”模块
- Altium designer-PCB设计基础笔记
- CAD图纸的保存格式DWG DWF DXF互相转换是怎么操作的?
- 同城门户同城分类信息网站源码+小程序端+49款插件
- 计算机ppt实训报告总结,计算机实训总结模板
- Android类库常用类库一览
- 崩溃!因对领导不满前网管离职后远程入侵服务器,致诊疗系统瘫痪!
- nodejs 运行后报错 Error: Couldn‘t find preset “es2015“ relative to directory
- 2021年全球住宅电梯收入大约1534.2百万美元,预计2028年达到1957.3百万美元
- 安徽农商行计算机类笔试考什么,2019安徽农商行社会招聘:笔试考什么?如何复习? 【附带笔试模拟题】...
- 【win10】文件重命名怎么改不了文件格式/改不了后缀/想要更改文件后缀/改变文件类型
热门文章
- 自定义类加载器(ClassLoader + URLClassLoader)
- jvm 垃圾收集算法_JVM垃圾收集和优化
- jmeter进行性能测试_使用JMeter进行性能测试
- spring api层打包_Spring项目的按层打包已过时
- spring多个视图解析器_在Spring中配置多个View解析器
- tomcat默认连接数_Tomcat的默认连接器
- Spring核心注释
- java开发人员_Java 8:开发人员怎么看?
- 使用Spock 1.2简化对遗留应用程序的集成测试
- grails框架_Play和Grails Java框架的优缺点