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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • siamfC「建议收藏」

    siamfC「建议收藏」classSiameseAlexNet(nn.Module):def__init__(self,gpu_id,train=True):super(SiameseAlexNet,self).__init__()self.features=nn.Sequential(nn.Conv2d(3,96,11,2),nn.BatchNorm2d(96),nn.ReLU(inp.

    2022年10月1日
    3
  • 纯CSS画三角形

    纯CSS画三角形之前遇到过的问题如果查了然后懂了,然后没有及时复盘思考,就很容易还回去,今天把许久之前的这个知识点再整理一下,一是加深自己的记忆,二也是让初学者更容易懂。首先,创建一个空的div&lt;divclass="triangle"&gt;&lt;/div&gt;然后,CSS处理它的边框,给它不一样的颜色,好观察.triangle{border-left:100pxs…

    2022年6月24日
    25
  • 进入mariadb_Windows10系统下安装MariaDB 的教程图解[通俗易懂]

    进入mariadb_Windows10系统下安装MariaDB 的教程图解[通俗易懂]截至写这篇博客为止,MariaDB官方的稳定版本为,详情访问官方地址:https://downloads.mariadb.org/安装之前先简单说一下MariaDB:MariaDB由MySQL的创始人麦克尔·维德纽斯主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。甲骨文公司收购了MySQL后,有…

    2022年6月4日
    35
  • 电气设计心得体会_原理图设计规范

    电气设计心得体会_原理图设计规范本博客将简述中兴通讯股份有限公司在原理图设计中需要注意的一些事项,其中包含了中兴设计开发部积累的大量硬件开发知识和经验,可以作为学习使用。硬件工程师可以学习并掌握检查条目的内容以及对条目的详细说明,学习部门经验。

    2025年9月18日
    5
  • PO模式详解

    PO模式详解po 模式详解

    2025年7月16日
    4
  • 软件架构与设计模式_软件架构设计

    软件架构与设计模式_软件架构设计什么是架构?软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的标准观点。ANSI/IEEE610.12-1990软件工程标准词汇对于体系结构定义是:“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组…

    2022年8月31日
    4

发表回复

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

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