如果是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. phonegap支付宝2.0移动快捷支付插件IOS版

    坑爹的支付宝,一两年都没有更新sdk了,这两天突然更新sdk,而且更新的变化特别大,所以只能对之前的支付宝快捷支付插件重新写了一遍. 这样既顺应了支付宝的更新,同时也支持了ios8. 废话少说,集成过 ...

  2. zend studio打开文件提示unsupported character encoding

    zend studio打开文件提示unsupported character encoding,是文件的编码方式错误. 有可能是PHP代码中,charset={CHARSET} ,用了变量的形式调用编 ...

  3. [java]struts2 模型驱动 2016-05-01 21:40 702人阅读 评论(19) 收藏

    一开始敲网上商城的时候,对于数据的传递方式我是很惊艳了一把的,感觉特别高大上,就感觉,竟然不用像.net一样取谁的值,给谁赋值这样,只要需要用的时候,简单的get一下就ok了,简直高大上啊. 然后发现 ...

  4. SDUT-2139_从起始点到目标点的最短步数(BFS)

    数据结构实验之图论五:从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在古老的魔兽 ...

  5. LeetCode108 Convert Sorted Array to Binary Search Tree

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. (M ...

  6. phpexecl

    <?phpnamespace Admin\Controller;use Think\Controller;class InoutController extends Controller { p ...

  7. @雅礼集训01/10 - T1@ matrix

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个矩阵.求它的所有子矩阵中本质不同的行的个数之和. inp ...

  8. 数据库设计mysql字段不默认为NULL原因搜集

    索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的.所以我们在数据库设计时不要让字段的默认值为NULL ...

  9. avalon2 第一个demo

    <!DOCTYPE html> <html> <head> <title>TODO supply a title</title> <m ...

  10. SSM整合 mybatis多条件查询与分页

    多条件查询与分页: 通过页面的houseName.floorage获取值传到前端视图(HouseSearchVO)实体类中的houseName,floorage建立houseSearchVO对象. 通 ...