码迷,mamicode.com
首页 > 编程语言 > 详细

java 多线程 , 等待所有子线程都执行完后 , 在执行主线程(其中的一种 , 也是个人觉得最好用的一种)

时间:2019-10-08 12:35:00      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:主线程   i++   自己的   cut   countdown   不为   ring   new   rup   

 public static void main(String[] args) throws InterruptedException {

        // Runtime.getRuntime().availableProcessors()  获取可用的cpu数量
        int count = Runtime.getRuntime().availableProcessors();

        //创建一个指定线程数量的线程池
        ExecutorService executorService = Executors.newFixedThreadPool(count);

        /**
         * CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。
         * 每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,
         * 它表示所有的线程已经完成了任务
         */
        CountDownLatch downLatch = new CountDownLatch(count);

        for (int i = 0; i <count ; i++) {
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(Thread.currentThread().getName());
                    downLatch.countDown();//计数器减 1
                }
            });
        }

        /**
         * 如果计数器不为0的话 , 主线程会进入阻塞状态
         * timeout : 5 表示最大超时时间
         * TimeUnit.SECONDS  表示以秒为单位计算的
         * 返回值 , 如果downLatch 计数器不为0的话,就是false ,反之true
         * 它还有一个无参的 downLatch.await(),如果计数器不为0 , 会一直阻塞 , 没有超时时间
         */
        boolean await = downLatch.await(5, TimeUnit.SECONDS);

        System.out.println(await);

        //downLatch.getCount() 获取剩余的数量
        System.out.println(downLatch.getCount());

        System.out.println("主线程执行:=>"+Thread.currentThread().getName());

    }

 

java 多线程 , 等待所有子线程都执行完后 , 在执行主线程(其中的一种 , 也是个人觉得最好用的一种)

标签:主线程   i++   自己的   cut   countdown   不为   ring   new   rup   

原文地址:https://www.cnblogs.com/dmxk/p/11634466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!