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

  • 相关阅读:
    python如何进行内存管理的
    多进程于多线程的区别,cpu密集型适合用什么
    __new__() 与__init__()的区别
    orm的理解
    三次握手四次挥手
    HTTP、TCP、IP、协议
    mysql字段添加修改删除
    django本身提供了runserver,为什么不能用来部署(runserver与uWSGI的区别)
    django中scrf的实现机制
    django重定向是如何实现的,用的什么状态码?
  • 原文地址:https://www.cnblogs.com/codingmode/p/15048692.html
Copyright © 2020-2023  润新知