自定义线程池-参数设计分析

通过观察Java中的内置线程池参数讲解和线程池工作流程总结,我们不难发现,要设计一个好的线程池,就必须合理的设置线程池的4个参数;那到底该如何合理的设计4个参数的值呢?我们一起往下看.

4个参数的设计:

1:核心线程数(corePoolSize)

核心线程数的设计需要依据任务的处理时间和每秒产生的任务数量来确定,例如:执行一个任务需要0.1秒,系统百分之80的时间每秒都会产生100个任务,那么要想在1秒内处理完这100个任务,就需要10个线程,此时我们就可以设计核心线程数为10;当然实际情况不可能这么平均,所以我们一般按照8020原则设计即可,既按照百分之80的情况设计核心线程数,剩下的百分之20可以利用最大线程数处理;

2:任务队列长度(workQueue)

任务队列长度一般设计为:核心线程数/单个任务执行时间*2即可;例如上面的场景中,核心线程数设计为10,单个任务执行时间为0.1秒,则队列长度可以设计为200;

3:最大线程数(maximumPoolSize)

最大线程数的设计除了需要参照核心线程数的条件外,还需要参照系统每秒产生的最大任务数决定:例如:上述环境中,如果系统每秒最大产生的任务是1000个,那么,最大线程数=(最大任务数-任务队列长度)*单个任务执行时间;既: 最大线程数=(1000-200)*0.1=80个;

4:最大空闲时间(keepAliveTime)

这个参数的设计完全参考系统运行环境和硬件压力设定,没有固定的参考值,用户可以根据经验和系统产生任务的时间间隔合理设置一个值即可;

小提示:

上面4个参数的设置只是一般的设计原则,并不是固定的,用户也可以根据实际情况灵活调整!

自定义线程池-参数设计分析相关推荐

  1. 【Java 并发编程】线程池机制 ( 线程池阻塞队列 | 线程池拒绝策略 | 使用 ThreadPoolExecutor 自定义线程池参数 )

    文章目录 一.线程池阻塞队列 二.拒绝策略 三.使用 ThreadPoolExecutor 自定义线程池参数 一.线程池阻塞队列 线程池阻塞队列是线程池创建的第 555 个参数 : BlockingQ ...

  2. 四种常用线程池及自定义线程池参数详细分析

    文章目录 一.什么是线程池 二.常用的更方便的Executors工厂方法 三.自定义线程池 四.缓冲队列BlockingQueue 五. 排队的三种一般策略 六.拒绝策略 一.什么是线程池 线程池(英 ...

  3. 一文搞懂Java自定义线程池参数

    背景: 线程是一个开发经常使用的东西,但是实际工作中很少有新建一个线程去执行任务,线程的创建和销毁都会耗费资源,我们一般都会用线程池来完成线程的创建和销毁. 多说一句 JDK自带的线程池不建议大家去使 ...

  4. 自定义线程池内置线程池的使用 ThreadPoolExecutor和Executorservice 示例与注意事项

    文章目录 线程池介绍 自己设计一个线程池 1.设计ThreadPool类: 2.设计工作队列 3.实现自己设计的线程池 用java的ThreadPoolExecutor自定义线程池 自定义线程池-参数 ...

  5. 狂神JUC——7大参数及自定义线程池

    JUC 1 狂神JUC--传统的Synchronized锁 2 狂神JUC--Lock锁 3 狂神JUC--Lock版生产者和消费者 4 狂神JUC--Synchronized版的生产者和消费者问题 ...

  6. android自定义线程池工具类,妈妈再也不用担心你不会使用线程池了(ThreadUtils)...

    为什么要用线程池 使用线程池管理线程有如下优点:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行. 提高线程的可 ...

  7. Java 自定义线程池

    Java 自定义线程池 https://www.cnblogs.com/yaoxiaowen/p/6576898.html public ThreadPoolExecutor(int corePool ...

  8. Spring Boot使用@Async实现异步调用:自定义线程池

    在之前的Spring Boot基础教程系列中,已经通过<Spring Boot中使用@Async实现异步调用>一文介绍过如何使用 @Async注解来实现异步调用了.但是,对于这些异步执行的 ...

  9. 线程池传递对象参数_一次线程池参数错误引起的线上故障

    在JAVA里,我们通常会把没有前后依赖关系的逻辑操作扔到多个线程里并行执行,以提高代码运行效率. 同时,我们一般也不会单独显式创建线程,而是通过线程池设置线程.使用线程池的好处是减少在创建和销毁线程上 ...

最新文章

  1. android:layout_with=,android – 难以理解layout_alignWithParentIfMissing
  2. git 第三天 SSH免密码登录 2
  3. Quartus II11.0安装教程
  4. java需要知道的计算机底层
  5. 使用 Blazor 开发内部后台(四):基于Card组件快速搭建导航首页
  6. linux内核cpu负载计算,CPU 负载 — The Linux Kernel documentation
  7. (pytorch-深度学习)深度循环神经网络
  8. 阿里巴巴Python工程师面试题之一:单引号,双引号,三引号的区别
  9. java中的位移运算符_Java 位移运算符
  10. SSH框架hibernate无法添加或修改,saveorupdate方法失效
  11. 当前版本的Android Gradle插件不支持按需配置
  12. 基于Java的TCP Socket通信详解
  13. 【渝粤题库】陕西师范大学 《道德教育案例研究》作业
  14. 液晶显示器常见故障维修方法
  15. Windows上解除宽带限速(网速明显提升)
  16. EMC启航:我们为什么要做EMC
  17. 【GPS仿真】基于matlab GPS信号捕获跟踪定位仿真【含Matlab源码 1960期】
  18. 生物信息学所需的计算机知识,生物信息学专业计算机课程的探讨
  19. 在iPhone应用里直接打开app store 评论页面的方法
  20. PDF打印机 能打印A2以上纸张

热门文章

  1. 【python】入门指南:控制语句
  2. js-移动端android浏览器中input框被软键盘遮住的问题解决方案
  3. 揭秘传智播客毕业班的超级薪水7k内幕系列II----Offer工资表5.7k,为什么不能让老师就业就业...
  4. gridView删除提示框
  5. MySQL中的单引号
  6. iOS隐藏键盘的几种方式
  7. Flex容器拖动(Bordercontainer为例)
  8. Silverlight Telerik控件学习:数据录入、数据验证
  9. 【Apache POI】Java 读取Excel文件
  10. 深入Java -JVM 垃圾回收