zoukankan      html  css  js  c++  java
  • CyclicBarrier的使用

    在java的线程同步器中有一个类叫做CyclicBarrier,使用这个类可以使多个线程在全部达到某种条件的情况下才能执行接下的任务。举个例子来说,田径比赛上,发令员必须等到所有的选手都准备好了之后才开枪,在任何一个运动员准备好之前,其他的运动员都是不可以抢跑的,必须等到所有的运动达到了准备状态才可以。

    package com.app.async;
    import java.util.concurrent.*;
    /**
     * Created by joe.wang on 2016/7/21.
     */
    public class CyclicBarrierMotion {
        public static void main(String[] args) {
            CyclicBarrier barrier = new CyclicBarrier(3);
            ExecutorService service = Executors.newCachedThreadPool();
            service.submit(new RunnningMan(barrier, "zhangsan"));
            service.submit(new RunnningMan(barrier, "lisi"));
            service.submit(new RunnningMan(barrier,"wangwu"));
            service.shutdown();
        }
    }
    class RunnningMan implements Runnable {
        private CyclicBarrier mCyclicBarrier;
        private String tagName;
        public RunnningMan(CyclicBarrier barrier, String name) {
            this.mCyclicBarrier = barrier;
            tagName = name;
        }
        @Override
        public void run() {
            try {
                Thread.sleep(1000 * (int)(Math.random() * 10));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(tagName + " 准备好了!");
            try {
                mCyclicBarrier.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                e.printStackTrace();
            }
            System.out.println(tagName + "开始run!!");
        }
    }

    可以理解为调用了await()方法表示该线程已经准备好了,正在等待其他线程;当最后一个线程调用awit()方法时,所有的线程阻塞被解除。

  • 相关阅读:
    hdu2588-GCD-(欧拉函数+分解因子)
    欧拉定理及其扩展定理公式
    hdu2973-YAPTCHA-(欧拉筛+威尔逊定理+前缀和)
    hdu5391-Zball in Tina Town-威尔逊定理(假证明)
    deleted
    deleted
    deleted
    deleted
    deleted
    deleted
  • 原文地址:https://www.cnblogs.com/summerpxy/p/13648323.html
Copyright © 2011-2022 走看看