zoukankan      html  css  js  c++  java
  • Java++:如何判断一个线程池中的所有线程都执行完成?

    最近去参加一个央行项目组的面试,被问到线程池的问题:如何判断一个线程池中的所有线程都已经执行完成?当时没有回答上来。回来之后,google出一堆方案:有用ConcurrentHashmap手动计数的。还有说,先执行线程池的shutdown()方法,此时不再会接受新的线程任务了,只会执行以前的任务,然后通过isTerminated()方法判断时候执行完所有线程。我感觉都不够理想。 经一个比较务实的朋友介绍说api原生支持,我赶紧尝试并记录下来。。顺便吐槽一下,现在的职场,尤其是技术圈的浮躁之风,做了没3年的程序就纷纷想转管理~技术上不求甚解,知其然不知其所以然,迷信于某个人的经验,公司的技术分享也只是迫于升职要求才去做的,分享的内容没干货。。静下心来,做学问,才是对一个程序员最有益处的。言归正传,上代码。

    public class ThreadsIsDone {
        public static void main(String[] args) {
            //创建一个10个线程的线程池
            ThreadPoolExecutor pool = new ThreadPoolExecutor(10, 10,
                    0L, TimeUnit.MILLISECONDS,
                    new LinkedBlockingQueue<Runnable>());
    
            for(int i=0;i<10;i++){
                pool.submit(new Runnable() {
                    public void run() {
                        System.out.println("当前线程:"+Thread.currentThread().getName()+",打印随机数:"+ new Random().nextInt(1000));
                    }
                });
            }
            System.out.println("pool.getTaskCount():"+pool.getTaskCount());
            System.out.println("pool.getCompletedTaskCount():"+pool.getCompletedTaskCount());
            boolean allThreadsIsDone = pool.getTaskCount()==pool.getCompletedTaskCount();
            System.out.println(allThreadsIsDone);
            if(allThreadsIsDone){
                System.out.println("全部执行完成");
            }
            while (!allThreadsIsDone){
                allThreadsIsDone = pool.getTaskCount()==pool.getCompletedTaskCount();
                if(allThreadsIsDone){
                    System.out.println("全部执行完成");
                }
            }
    
    
        }
    }

  • 相关阅读:
    Android开源项目分类汇总
    android开发之Tabhost刷新
    android开发之图表
    通过易宝实现网上支付
    HTTP协议
    汽车美容管理系统质量属性
    框架选择的原因及其说明
    浅析软件架构
    《需求分析与系统设计》读书笔记3
    《需求分析与系统设计》读书笔记2
  • 原文地址:https://www.cnblogs.com/codingmode/p/15048692.html
Copyright © 2011-2022 走看看