zoukankan      html  css  js  c++  java
  • Java线程--CyclicBarrier使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11867687.html

    Java线程--CyclicBarrier使用, 代码里头有详细注释:

    public static void main(String[] args) {
            /**
             * 可循环使用的栅栏
             * parties表示需要多少个线程同时执行, 相当于一个起跑线
             * 2代表2个线程必须在 await()方法的地方都暂停一下, 等其他人到齐了一起执行
             * 第二个参数代表新建一个线程在所有等待的线程方法之前执行
             */
            CyclicBarrier cyclicBarrier = new CyclicBarrier(2, new Runnable() {
                @Override
                public void run() {
                    System.out.println("先执行这个方法!");
                }
            });
            ExecutorService service1 = Executors.newSingleThreadExecutor();
            service1.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(3000);
                        /**
                         * 设定一个起跑点 , 所有设置了await()方法的线程都必须等到这个时候开始执行
                         * 不能抢跑
                         */
                        cyclicBarrier.await();
                        System.out.println(new Date());
                    } catch (InterruptedException | BrokenBarrierException e) {
                        e.printStackTrace();
                    }
                    System.out.println("子线程:"+Thread.currentThread().getName()+"执行");
                }
            });
            service1.shutdown();
    
            ExecutorService service2 = Executors.newSingleThreadExecutor();
            service2.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(3000);
                        /**
                         * 设定一个起跑点 , 所有设置了await()方法的线程都必须等到这个时候开始执行
                         * 不能抢跑
                         */
                        cyclicBarrier.await();
                        System.out.println(new Date());
                    } catch (InterruptedException | BrokenBarrierException e) {
                        e.printStackTrace();
                    }
                    System.out.println("子线程:"+Thread.currentThread().getName()+"执行");
                }
            });
            service2.shutdown();
        }

    打印如下;

    先执行这个方法!
    Fri Nov 15 16:51:14 CST 2019
    Fri Nov 15 16:51:14 CST 2019
    子线程:pool-1-thread-1执行
    子线程:pool-2-thread-1执行
  • 相关阅读:
    Linux系统启动过程
    Window磁盘错误修复chkdsk
    迅雷精简版-纪念走过的时光
    NTP国内时钟服务器
    完完全全彻底删除VMware_Workstation
    Linux默认日志含义
    java 生成泛型的参数的实例 T t=new T()
    dubbo源码解析-zookeeper创建节点
    dubbo服务端,dubbo客户端,注册中心(zk)之间的心跳
    Dubbo阅读笔记——高级功能
  • 原文地址:https://www.cnblogs.com/fanerwei222/p/11867687.html
Copyright © 2011-2022 走看看