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()方法时,所有的线程阻塞被解除。

  • 相关阅读:
    关于数据库的压测(window+liunx)
    参数化关联----三种方式
    jmeter的使用
    day07----------移动端测试
    day07----------Charles抓取web端的HTTPS协议下载和七个功能操作
    CURL 运用
    有关数据库的导出导入备份
    同时删除多张表的数据
    一条sql语句update 多条记录
    linux 将一个服务器上的文件或文件夹拷贝到另一个服务器上(转载)
  • 原文地址:https://www.cnblogs.com/summerpxy/p/13648323.html
Copyright © 2011-2022 走看看