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

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

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

    public static void main(String[] args) throws InterruptedException {
            /**
             * 基于计数器的线程等待-完毕执行控制器
             * 线程A调用await()方法后, 只有计数为0, 线程A才能继续执行, 否则将一直挂起
             */
            CountDownLatch countDownLatch = new CountDownLatch(2);
            System.out.println("主线程开始执行");
            ExecutorService service1 = Executors.newSingleThreadExecutor();
            service1.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(3000);
                        System.out.println("子线程:"+Thread.currentThread().getName()+"执行");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    /**
                     * 计数器的值减1
                     */
                    countDownLatch.countDown();
                }
            });
            service1.shutdown();
    
            ExecutorService service2 = Executors.newSingleThreadExecutor();
            service2.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    /**
                     * 计数器的值减1
                     */
                    System.out.println("子线程:"+Thread.currentThread().getName()+"执行");
                    countDownLatch.countDown();
                }
            });
            service2.shutdown();
            System.out.println("等待两个线程执行完毕…… ……");
            try {
                /**
                 * 主线程里面调用的await()方法, 那么主线程在这里会被挂起,
                 * 等到countDownLatch的计数为0的时候再继续回来执行
                 */
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("两个子线程都执行完毕,继续执行主线程");
        }

     打印如下:

    主线程开始执行
    等待两个线程执行完毕…… ……
    子线程:pool-1-thread-1执行
    子线程:pool-2-thread-1执行
    两个子线程都执行完毕,继续执行主线程
  • 相关阅读:
    基于Appium的自动化case开发及case分层结构设计
    功能自动化接入持续集成方案
    Windows上部署Appium自动化测试框架
    Mac上部署Appium测试框架
    Appium原理简述
    开篇
    数据结构和算法动态可视化
    Request实现简易注册登录
    过滤器解决中文乱码
    简易登录拦截(没有登录前直接访问主页则跳转到登录页)
  • 原文地址:https://www.cnblogs.com/fanerwei222/p/11867656.html
Copyright © 2011-2022 走看看