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("全部执行完成");
                }
            }
    
    
        }
    }

  • 相关阅读:
    Spark的Shuffle机制
    Map Reduce的代码学习
    本地IDEA跑阿里云服务器Word Count
    HDFS的类学习和API基本操作
    本地IDEA(Windows)访问ECS服务器HBase
    本地IDEA访问ECS服务器HDFS
    阿里云ECS大数据环境搭建
    学会使用vue ui搭建项目
    用vue封装视频预览组件(手机端)
    项目中的部门使用级联选择器,编辑时初始化选中部门解决方案
  • 原文地址:https://www.cnblogs.com/codingmode/p/15048692.html
Copyright © 2011-2022 走看看