线程池参数调优「建议收藏」

线程池参数调优「建议收藏」ThreadPoolExecutorThreadPoolExecutor构造函数的五大参数publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,…

大家好,又见面了,我是你们的朋友全栈君。

ThreadPoolExecutor

ThreadPoolExecutor构造函数的五大参数

 public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) { 
   
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);
    }
  • corePoolSize 核心线程数,表示线程池支持的最小线程数
  • maximumPoolSize 最大线程数,当线程数大于核心线程数后,并且有界队列里存放能时,线程池还能接受maximumPoolSize – corePoolSize个线程
  • keepAliveTime 保持存活时间,空闲线程的存活时间,为了更好的复用线程
  • unit 线程存活时间的单位
  • workQueue 队列,等待线程存放的队列

提问:如下线程池同一时间最多能接受多少个线程?

 ThreadPoolExecutor pool = new ThreadPoolExecutor(2,5,10L, TimeUnit.SECONDS,new ArrayBlockingQueue<>(5));

答案是10个,等待队列里5个,最大线程数5个,多的线程请求将会被拒绝,异常如下
在这里插入图片描述
线程池的处理流程:
在这里插入图片描述
逻辑流程图
在这里插入图片描述

写个demo压测下线程池

public class ThreadPoolDemo { 
   

    public static void main(String[] args) { 
   

        ThreadPoolExecutor pool = new ThreadPoolExecutor(80,150,10L, TimeUnit.SECONDS,new ArrayBlockingQueue<>(200));
        long start = System.currentTimeMillis() / 1000;
        IntStream.range(0,500).forEach(i ->{ 
   
            pool.submit(new MyThread());
            try { 
   
                Thread.sleep(3L);
            } catch (InterruptedException e) { 
   
                e.printStackTrace();
            }
        });
        pool.shutdown();
        System.out.println("use time " + (System.currentTimeMillis() / 1000 - start) + "秒");

    }

   static class MyThread implements Runnable{ 
   

       @Override
        public void run() { 
   
            try { 
   
                Thread.sleep(500L);
                System.out.println(Thread.currentThread().getName()+" run ....");
            } catch (InterruptedException e) { 
   
                e.printStackTrace();
            }
        }
    }
}

执行结果
在这里插入图片描述
执行500个耗时0.5秒的操作用时2秒,速度提升了125倍。

注意

线程池的参数设置一定要甚重,当并发过高时,等待队列和最大线程数都到极限时,线程池就会采用一定的拒绝策略拒绝任务,这个一定要根据业务场景考虑。

另外还有一点队列尽量选用有界队列,否则最大线程数是没有意义的,潜在风险就是内存会爆。

【以上仅是个人观点,如有错误欢迎指证】

关注个人公众号

在这里插入图片描述

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

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

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


相关推荐

  • kali 目录扫描_kali扫描命令

    kali 目录扫描_kali扫描命令1、简介dirsearch是一个基于python3的命令行工具,常用于暴力扫描页面结构,包括网页中的目录和文件。相比其他扫描工具disearch的特点是:支持HTTP代理多线程支持多种形式的网页(asp,php)生成报告(纯文本,JSON)启发式检测无效的网页递归扫描用户代理随机化批量处理扫描器与字典(注:字典必须是文本文件)2、下载及安装GitHub的下载地址为:https://github.com/maurosoria/dirsearchWindows10安装方式点击c

    2022年9月26日
    3
  • 光纤及光纤接入设备[通俗易懂]

    光纤及光纤接入设备[通俗易懂]全面了解光纤接入设备及使用图解由于不同种类信息的需求也越来越多,伴随而来的不断增长的IP数据、话音、多媒体图像等多种新业务需求,促使了各大网络运营商的传送网络环境发生了翻天俯地的变化,以前那些以承载模拟话音为主要目的的传统城域网和接入网在容量以及接口种类上都已经无法满足多种多样的新业务传输与处理的要求。于是迫于社会信息量的突飞猛进,那些专门为城域网和接入…

    2025年5月22日
    3
  • layui弹出层html,layer弹出层「建议收藏」

    layui弹出层html,layer弹出层「建议收藏」layer弹出层,怎么只让他弹出一次.在线等我昨天用这个插件的时候也有这个问题,弹出内容大了就居不了中。这是组件不完美的地方,他设置了top和left值,而且是固定的。这种弹出层都是绝对定位的所以没办法用margin:auto0神马的居中。解决方案主要两种:1.修改在浏览器里面调试模式。jquerylayer怎么弹出指定的html内元素一个基本的弹出层应该满足以下需CSS布局HTML小编…

    2022年7月13日
    15
  • 黑盒测试的常见的测试用例设计方法有哪些[通俗易懂]

    黑盒测试的常见的测试用例设计方法有哪些[通俗易懂]测试用例怎么设计?一般根据业务知识掌握,之前已有的回归测试用例,测试知识库,测试需求开始设计。黑盒测试的常见的测试用例设计方法有哪些?1)等价类划分:等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.

    2022年6月29日
    23
  • java-mybaits-009-mybatis-spring-使用,SqlSessionFactoryBean、事务

    java-mybaits-009-mybatis-spring-使用,SqlSessionFactoryBean、事务

    2022年4月3日
    42
  • 看了这篇文章觉得MySQL读写分离这么简单「建议收藏」

    点赞多大胆,就有多大产!有支持才有动力!微信搜索公众号【达摩克利斯之笔】获取更多资源,文末有二维码!前言​  Mysql优化那篇文章有朋友留言说就这么点?,深深刺痛了晓添的心,感觉知识深度被小看了,痛定思痛决定发布读写分离,分表分库优化文章,其实这系列文章也在Mysql优化的计划之内,最近较忙断断续续写的有点难受,到今天才跟大家见面,篇幅有限这篇我们来说说基于Mycat实现读写分离,话不多…

    2022年4月13日
    59

发表回复

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

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