java 多线程-障栅CyclicBarrier
来源:互联网 发布:可靠性软件 编辑:程序博客网 时间:2024/06/07 15:27
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。
public class Test{public static void main(String[] arg){//新建一个障栅,其会阻拦10个线程CyclicBarrier cyclicBarrier = new CyclicBarrier(10);ThreadGroup group = new ThreadGroup("semaphore");//自定义线程组AtomicInteger num = new AtomicInteger(0);ThreadPoolExecutor pool = new ThreadPoolExecutor(10, 10, 1000, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(20), new ThreadFactory() {//线程池工厂@Overridepublic Thread newThread(Runnable r) {//生产新的线程Thread thread = new Thread(group, r, group.getName()+"-thread-"+num.getAndIncrement());thread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {@Overridepublic void uncaughtException(Thread t, Throwable e) {System.out.println(t.getName()+"发生异常:"+e.getMessage());}});return thread;}},new RejectedExecutionHandler() {//线程池的拒绝策略@Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {throw new RuntimeException("任务队列已满,任务被拒绝");}});//定义任务Runnable task = ()->{System.out.println("遇到了障栅....."+Thread.currentThread().getName()+"即将被阻塞");try {cyclicBarrier.await();System.out.println("障栅放开了....."+Thread.currentThread().getName()+"即将休眠");Thread.sleep(3000);} catch (InterruptedException | BrokenBarrierException e) {e.printStackTrace();}};try {Thread.sleep(8000);} catch (InterruptedException e) {e.printStackTrace();}for(int i = 0; i < 10; i++){//循环运行10个任务try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}pool.execute(task);}if(Thread.activeCount() > 1){Thread.yield();}pool.shutdown();}}
阅读全文
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多线程[7]:CyclicBarrier
- JAVA多线程之(CyclicBarrier)
- Java多线程技术之CyclicBarrier
- java中的多线程包---CyclicBarrier
- Java多线程--CyclicBarrier使用详解
- (九)java多线程之CyclicBarrier
- 第十四周【项目
- Java 8 新特性小结
- Java集合框架上机练习题
- 2分钟实现Android点击更换头像功能
- TLS
- java 多线程-障栅CyclicBarrier
- 开发需要注意的小点
- 实训第三次博客
- P1256 显示图像 【队列维护bfs】
- C# 生成不重复的随机数
- android的surfaceflinger原理讲解
- 防火墙管理器二:iptables
- 计算机网络系列(4)之应用层SubNet and DHCP
- [dsu on tree] Codeforces #600E. Lomsat gelral