如果是IO密集型应用,则线程池大小设置为2N+1;

如果是CPU密集型应用,则线程池大小设置为N+1;

N代表CPU的核数。

假设我的服务器是4核的,且一般进行大数据运算,cpu消耗较大,那么线程池数量设置为5为最优。

(现在很多项目线程池滥用,注意分配线程数量,建议不要动态创建线程池,尽量将线程池配置在配置文件中,这样方便以后整体的把控和后期维护。每个核心业务线程池要互相独立,互不影响。)

例子(spring):


  1. <bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"
  2. id="userPrivacyDataObtainThreadPool">
  3. <!-- 核心线程数 -->
  4. <property value="6" name="corePoolSize"/>
  5. <!-- 最大线程数 -->
  6. <property value="10" name="maxPoolSize"/>
  7. <!-- 队列最大长度 >=mainExecutor.maxSize -->
  8. <property value="200" name="queueCapacity"/>
  9. <!-- 线程池维护线程所允许的空闲时间 -->
  10. <property value="300" name="keepAliveSeconds"/>
  11. <!-- 线程池对拒绝任务(无线程可用)的处理策略 -->
  12. <property name="rejectedExecutionHandler">
  13. <bean class="java.util.concurrent.ThreadPoolExecutor$AbortPolicy"/>
  14. </property>
  15. </bean>

再附上scheduler定时任务的线程池配置:


  1. <!--项目内定时任务 -->
  2. <bean id="scheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
  3. <!-- 设置线程池容量,也是最大并发线程数 -->
  4. <property name="poolSize" value="2" />
  5. <!-- 当任务被取消的同时从当前调度器移除 -->
  6. <property name="removeOnCancelPolicy" value="true" />
  7. <!-- 线程名前缀 -->
  8. <property name="threadNamePrefix" value="cashpay-scheduler-" />
  9. <!-- 设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁 -->
  10. <property name="awaitTerminationSeconds" value="60" />
  11. <!-- 当调度器shutdown被调用时等待当前被调度的任务完成 -->
  12. <property name="waitForTasksToCompleteOnShutdown" value="true" />
  13. <!-- 线程池对拒绝任务(无线程可用)的处理策略 -->
  14. <property name="rejectedExecutionHandler">
  15. <bean class="java.util.concurrent.ThreadPoolExecutor$AbortPolicy"/>
  16. </property>
  17. </bean>

注:java代码往线程池中添加线程时,需要用try...catch...包含,因为可能会因为线程池队列满而抛出异常(见rejectedExecutionHandler)(虽然这种情况不多见),java中没有显示的声明,少糖语言是出了名的。。。

原文地址:https://blog.csdn.net/wangpeng322/article/details/80737583

Executor线程池的最佳线程数量计算的更多相关文章

  1. 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程

    额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...

  2. Java多线程系列--“JUC线程池”03之 线程池原理(二)

    概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...

  3. 线程池之ThreadPoolExecutor线程池源码分析笔记

    1.线程池的作用 一方面当执行大量异步任务时候线程池能够提供较好的性能,在不使用线程池的时候,每当需要执行异步任务时候是直接 new 一线程进行运行,而线程的创建和销毁是需要开销的.使用线程池时候,线 ...

  4. 深入浅出 Java Concurrency (34): 线程池 part 7 线程池的实现及原理 (2)[转]

    线程池任务执行流程 我们从一个API开始接触Executor是如何处理任务队列的. java.util.concurrent.Executor.execute(Runnable) Executes t ...

  5. Java多线程系列--“JUC线程池”01之 线程池架构

    概要 前面分别介绍了"Java多线程基础"."JUC原子类"和"JUC锁".本章介绍JUC的最后一部分的内容——线程池.内容包括:线程池架构 ...

  6. Java多线程系列--“JUC线程池”02之 线程池原理(一)

    概要 在上一章"Java多线程系列--“JUC线程池”01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析Th ...

  7. Java多线程系列--“JUC线程池”04之 线程池原理(三)

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介绍线程池的生命周期.在"Java多线程系列--“基础篇”01之 基 ...

  8. Java多线程系列--“JUC线程池”05之 线程池原理(四)

    概要 本章介绍线程池的拒绝策略.内容包括:拒绝策略介绍拒绝策略对比和示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3512947.html 拒绝策略 ...

  9. 内存池、进程池、线程池介绍及线程池C++实现

    本文转载于:https://blog.csdn.net/ywcpig/article/details/52557080 内存池 平常我们使用new.malloc在堆区申请一块内存,但由于每次申请的内存 ...

随机推荐

  1. jQuery左右循环滚动图片特效

    在线演示 本地下载

  2. [框架]eclipse搭建ssm框架 一 标签: eclipsetomcat框架 2017-03-25 21:28 1085人阅读 评论(

    虽然现在也做过一些项目,但是自己从头搭起来的框架几乎没有,所以这两天自己搭了一下ssm的框架,下面写一下框架的搭建过程.并且给出增删改查四条线来方便大家熟悉代码. 环境准备 maven3.2.3 ec ...

  3. VS中,卸载,移除,删除项目的区别

    不说话,上图.

  4. Directx11学习笔记【九】 3D渲染管线

    原文:Directx11学习笔记[九] 3D渲染管线 原文地址:http://blog.csdn.net/bonchoix/article/details/8298116 3D图形学研究的基本内容,即 ...

  5. python 函数定义与调用时,不定长参数的传入

  6. Java练习 SDUT-3268_飞花的糖果

    飞花的糖果 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一日,飞花壕大手一挥,买了N个的两两不相同糖果,他想要拿出M ...

  7. datetimepicker —— 日期选择控件

    一.依赖 <link rel="stylesheet" href="css/bootstrap.min.css"> <link rel=&qu ...

  8. Java练习 SDUT-1211_英文金曲大赛

    英文金曲大赛 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 我们在"渊子数"的题目中已经了解了渊子 ...

  9. jQuery 滑动

    jQuery 滑动方法 通过 jQuery,您可以在元素上创建滑动效果. jQuery 拥有以下滑动方法: slideDown() slideUp() slideToggle() jQuery sli ...

  10. CSS常用函数calc等

    >>CSS常用函数<<