ThreadPoolExecutor的keepAliveTime=0说明

点击上方☝,轻松关注!及时获取有趣有料的技术文章如题,如下图,解释ThreadPoolExecutor的keepAliveTime=0。上图来自《并发编程的艺术》一书,书中有下面一段描…

大家好,又见面了,我是全栈君。

点击上方☝,轻松关注!及时获取有趣有料的技术文章

ThreadPoolExecutor的keepAliveTime=0说明

如题,如下图,解释 ThreadPoolExecutor的keepAliveTime=0

ThreadPoolExecutor的keepAliveTime=0说明

上图来自《并发编程的艺术》一书,书中有下面一段描述:

“当线程池中的线程数大于corePoolSize时,keepAliveTime 为多余的空闲线程等待新任务的最长时间, 超过这个时间后多余的线程将被终止。这里把keepAliveTime设置为0L,意味着多余 的空闲线程会被立即终止。”

网上很多博客资料都是说的0表示在空闲的时候线程永久存活。其实是不准确的。

附上验证代码:

public static void main(String[] args) throws InterruptedException {
        // 创建了一个线程池
        ThreadPoolExecutor executor = new ThreadPoolExecutor(1,
                2,
                0, TimeUnit.SECONDS,
                new LinkedBlockingQueue<Runnable>(1));

        for (int i = 0; i < 3; i++) {
            executor.execute(new DemoTask(i));
        }

        while (true) {
            System.out.println("总线程数:" + executor.getPoolSize() + ", 当前活跃线程数:" + executor.getActiveCount());
            TimeUnit.SECONDS.sleep(1);
        }
    }

    static class DemoTask implements Runnable {
        int num;

        public DemoTask(int i) {
            this.num = i;
        }

        @Override
        public void run() {
            System.out.println("num=" + num + " Thread = " + Thread.currentThread().getName());
            if (num >= 1) {
                try {
                    TimeUnit.SECONDS.sleep(1);
                    System.out.println("num=" + num + " sleep 1 s结束");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            } else {
                try {
                    TimeUnit.SECONDS.sleep(3);
                    System.out.println("num=" + num + " sleep 3 s结束");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

打印结果:

num=2 Thread = pool-1-thread-2
总线程数:2, 当前活跃线程数:2
num=0 Thread = pool-1-thread-1
num=2 sleep 1 s结束
num=1 Thread = pool-1-thread-2
总线程数:2, 当前活跃线程数:2
num=1 sleep 1 s结束
总线程数:1, 当前活跃线程数:1
num=0 sleep 3 s结束
总线程数:1, 当前活跃线程数:1
总线程数:1, 当前活跃线程数:0
总线程数:1, 当前活跃线程数:0

 任务一执行完,大 于 corePoolSize 数的空闲线程立马嗝屁。

本篇完~

推荐阅读

深入理解 Java 线程池,讲解的太清晰了

【强制】-为什么阿里要禁用 Executors 创建线程池?

ThreadPoolExecutor的keepAliveTime=0说明

ThreadPoolExecutor的keepAliveTime=0说明

一个技术人珍藏的武学秘籍ThreadPoolExecutor的keepAliveTime=0说明

点亮在看ThreadPoolExecutor的keepAliveTime=0说明

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120971.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux重启syslog服务命令_win7到正在启动进不去

    linux重启syslog服务命令_win7到正在启动进不去在CentOS6.x中,日志服务已经由rsyslogd取代了原先的syslogd。RedHat公司认为syslogd已经不能满足工作中的需求,rsyslogd相比syslogd具有一些新的特点:基于TCP网络协议传输日志信息。更安全的网络传输方式。有日志信息的即时分析框架。后台数据库。在配置文件中可以写简单的逻辑判断。与syslog配置文件相兼容。rsyslogd日志服…

    2022年8月15日
    5
  • GridView导出Excel的超好样例「建议收藏」

    GridView导出Excel的超好样例「建议收藏」事实上网上有非常多关于Excel的样例,可是不是非常好,他们的代码没有非常全,读的起来还非常晦涩。经过这几天的摸索,最终能够完毕我想要导出报表Excel的效果了。以下是我的效果图。一.前台的页面图Gr

    2022年7月4日
    25
  • JVM内存结构概述

    JVM内存结构概述本节将会介绍一下JVM的内存结构,JVM运行时数据区的各个组成部分:堆,方法区,程序计数器,Java虚拟机栈,本地方法栈,还会对Java堆的分代划分做个简单的介绍。目录前言JVM是什么JVM内存结构概览运行时数据区程序计数器Java虚拟机栈本地方法栈方法区运行时常量池Java堆直接内存前言JVM是Java中比较难理解和掌握的一部分,也是面试…

    2022年6月3日
    45
  • 旅游管理系统——你凭什么不被吐槽?

    旅游管理系统——你凭什么不被吐槽?旅游管理系统显然成为了旅行社经营管理的又一个利器。当前,旅游管理系统作为旅游业旅行社发展的重要组成部分,成为旅行社互联网建设的重要切入点。目前旅游管理系统的在旅行社的口碑如何?开发旅游管理系统的目的是为了使旅游业的信息建设更加完善、服务更加便捷、管理更加精细,有效提高旅游业现代化发展质量和水平。管理系统在使用过程中,通过旅行社的业务对接、云计算、大数据等新一代信息技术创新应用已经成为主流。本次将…

    2022年5月9日
    51
  • 中文金融领域情感词典构建「建议收藏」

    中文金融领域情感词典构建「建议收藏」2019年10月4日-6日Python爬虫与文本分析工作坊&课题申报高级研修班这篇文章是公众号关注者郝童鞋今早发给我的,在此谢谢郝童鞋。文章基于简单算法和人工…

    2022年8月23日
    10
  • Ubuntu 更新源方法[通俗易懂]

    Ubuntu 更新源方法[通俗易懂]阿里源:https://opsx.alibaba.com/mirrordebhttp://mirrors.aliyun.com/ubuntu/bionicmainrestricteduniversemultiversedeb-srchttp://mirrors.aliyun.com/ubuntu/bionicmainrestricteduniversemultiver…

    2022年5月14日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号