zoukankan      html  css  js  c++  java
  • 多线程-栅栏CyclicBarrier

      上一篇总结了闭锁CountDownLatch,这一篇总结一下栅栏CyclicBarrier。它们两者之间的区别主要是,闭锁是等待一个事件发生,比如上一篇的田径比赛,运动员等待裁判哨声一响就可以开始跑,假如这个时候某个选手走神了,还没准备就绪,这个时候其他队员不需要等待他准备就绪才可以开始跑。

      而栅栏呢,就必须等待所有队员准备就绪的时候,才可以开始跑。类似生活中,我们几个人约好出去春游,出发前,我们在某一个地点集合,等所有人都到齐的时候,我们才开始搭车出去春游,如果某一个小伙伴还没到聚集地,我们就一直等到他到了,才开始出发。

      闭锁用于等待事件,而栅栏用于等待其他线程准备就绪。下面看一下例子:

    package cyclicBarrier.cyclicBarrier;
    
    import java.util.concurrent.BrokenBarrierException;
    import java.util.concurrent.CyclicBarrier;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class CyclicBarrierDemo {
    
        public static void main(String []args){
            
            ExecutorService exec=Executors.newCachedThreadPool();
            
            final CyclicBarrier barrier=new CyclicBarrier(5, new Runnable() {
                public void run() {
                    System.out.println("大家都到齐了,一起出发...");
                }
            });
            for(int i=1;i<=5;i++){
                final int num=i;
                Thread thread=new Thread(new Runnable() {
                    public void run() {
                        try {
                            Thread.sleep((long) (Math.random()*10000));
                            System.out.println(num+"号已经到达目的地..");
                            barrier.await();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        } catch (BrokenBarrierException e) {
                            e.printStackTrace();
                        }
                    }
                });
                exec.execute(thread);
            }
            exec.shutdown();
        }
    }

      运行结果如下:

      

      参考地址:JAVA并发编程实战

           http://m.jb51.net/article/63970.htm

  • 相关阅读:
    tile38 复制配置
    The Guardian’s Migration from MongoDB to PostgreSQL on Amazon RDS
    tile38 一款开源的geo 数据库
    sqler sql 转rest api 的docker 镜像构建(续)使用源码编译
    sqler sql 转rest api javascript 试用
    sqler sql 转rest api redis 接口使用
    sqler sql 转rest api 的docker image
    sqler sql 转rest api 的工具试用
    apache geode 试用
    benthos v1 的一些新功能
  • 原文地址:https://www.cnblogs.com/gdpuzxs/p/6993531.html
Copyright © 2011-2022 走看看