Executor线程池的最佳线程数量计算
如果是IO密集型应用,则线程池大小设置为2N+1;
如果是CPU密集型应用,则线程池大小设置为N+1;
N代表CPU的核数。
假设我的服务器是4核的,且一般进行大数据运算,cpu消耗较大,那么线程池数量设置为5为最优。
(现在很多项目线程池滥用,注意分配线程数量,建议不要动态创建线程池,尽量将线程池配置在配置文件中,这样方便以后整体的把控和后期维护。每个核心业务线程池要互相独立,互不影响。)
例子(spring):
-
<bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"
-
id="userPrivacyDataObtainThreadPool">
-
<!-- 核心线程数 -->
-
<property value="6" name="corePoolSize"/>
-
<!-- 最大线程数 -->
-
<property value="10" name="maxPoolSize"/>
-
<!-- 队列最大长度 >=mainExecutor.maxSize -->
-
<property value="200" name="queueCapacity"/>
-
<!-- 线程池维护线程所允许的空闲时间 -->
-
<property value="300" name="keepAliveSeconds"/>
-
<!-- 线程池对拒绝任务(无线程可用)的处理策略 -->
-
<property name="rejectedExecutionHandler">
-
<bean class="java.util.concurrent.ThreadPoolExecutor$AbortPolicy"/>
-
</property>
-
</bean>
再附上scheduler定时任务的线程池配置:
-
<!--项目内定时任务 -->
-
<bean id="scheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
-
<!-- 设置线程池容量,也是最大并发线程数 -->
-
<property name="poolSize" value="2" />
-
<!-- 当任务被取消的同时从当前调度器移除 -->
-
<property name="removeOnCancelPolicy" value="true" />
-
<!-- 线程名前缀 -->
-
<property name="threadNamePrefix" value="cashpay-scheduler-" />
-
<!-- 设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁 -->
-
<property name="awaitTerminationSeconds" value="60" />
-
<!-- 当调度器shutdown被调用时等待当前被调度的任务完成 -->
-
<property name="waitForTasksToCompleteOnShutdown" value="true" />
-
<!-- 线程池对拒绝任务(无线程可用)的处理策略 -->
-
<property name="rejectedExecutionHandler">
-
<bean class="java.util.concurrent.ThreadPoolExecutor$AbortPolicy"/>
-
</property>
-
</bean>
注:java代码往线程池中添加线程时,需要用try...catch...包含,因为可能会因为线程池队列满而抛出异常(见rejectedExecutionHandler)(虽然这种情况不多见),java中没有显示的声明,少糖语言是出了名的。。。
原文地址:https://blog.csdn.net/wangpeng322/article/details/80737583
Executor线程池的最佳线程数量计算的更多相关文章
- 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程
额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...
- Java多线程系列--“JUC线程池”03之 线程池原理(二)
概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...
- 线程池之ThreadPoolExecutor线程池源码分析笔记
1.线程池的作用 一方面当执行大量异步任务时候线程池能够提供较好的性能,在不使用线程池的时候,每当需要执行异步任务时候是直接 new 一线程进行运行,而线程的创建和销毁是需要开销的.使用线程池时候,线 ...
- 深入浅出 Java Concurrency (34): 线程池 part 7 线程池的实现及原理 (2)[转]
线程池任务执行流程 我们从一个API开始接触Executor是如何处理任务队列的. java.util.concurrent.Executor.execute(Runnable) Executes t ...
- Java多线程系列--“JUC线程池”01之 线程池架构
概要 前面分别介绍了"Java多线程基础"."JUC原子类"和"JUC锁".本章介绍JUC的最后一部分的内容——线程池.内容包括:线程池架构 ...
- Java多线程系列--“JUC线程池”02之 线程池原理(一)
概要 在上一章"Java多线程系列--“JUC线程池”01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析Th ...
- Java多线程系列--“JUC线程池”04之 线程池原理(三)
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509960.html 本章介绍线程池的生命周期.在"Java多线程系列--“基础篇”01之 基 ...
- Java多线程系列--“JUC线程池”05之 线程池原理(四)
概要 本章介绍线程池的拒绝策略.内容包括:拒绝策略介绍拒绝策略对比和示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3512947.html 拒绝策略 ...
- 内存池、进程池、线程池介绍及线程池C++实现
本文转载于:https://blog.csdn.net/ywcpig/article/details/52557080 内存池 平常我们使用new.malloc在堆区申请一块内存,但由于每次申请的内存 ...
随机推荐
- jQuery左右循环滚动图片特效
在线演示 本地下载
- [框架]eclipse搭建ssm框架 一 标签: eclipsetomcat框架 2017-03-25 21:28 1085人阅读 评论(
虽然现在也做过一些项目,但是自己从头搭起来的框架几乎没有,所以这两天自己搭了一下ssm的框架,下面写一下框架的搭建过程.并且给出增删改查四条线来方便大家熟悉代码. 环境准备 maven3.2.3 ec ...
- VS中,卸载,移除,删除项目的区别
不说话,上图.
- Directx11学习笔记【九】 3D渲染管线
原文:Directx11学习笔记[九] 3D渲染管线 原文地址:http://blog.csdn.net/bonchoix/article/details/8298116 3D图形学研究的基本内容,即 ...
- python 函数定义与调用时,不定长参数的传入
- Java练习 SDUT-3268_飞花的糖果
飞花的糖果 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一日,飞花壕大手一挥,买了N个的两两不相同糖果,他想要拿出M ...
- datetimepicker —— 日期选择控件
一.依赖 <link rel="stylesheet" href="css/bootstrap.min.css"> <link rel=&qu ...
- Java练习 SDUT-1211_英文金曲大赛
英文金曲大赛 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 我们在"渊子数"的题目中已经了解了渊子 ...
- jQuery 滑动
jQuery 滑动方法 通过 jQuery,您可以在元素上创建滑动效果. jQuery 拥有以下滑动方法: slideDown() slideUp() slideToggle() jQuery sli ...
- CSS常用函数calc等
>>CSS常用函数<<