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在堆区申请一块内存,但由于每次申请的内存 ...
随机推荐
- CSS权值比较(读书笔记)
1.继承0.1 标签1 类选择符10 ID选择符100 2.层叠:后面的样式会覆盖前面的样式. 3.内联样式表(标签内部) > 嵌入样式表(当前文件中) > 外部样式(外 ...
- Xici drop flower
var xici_user_api = "http://www.xici.net/apps/wedding/?method=wedding.user.getusername&from ...
- 中文乱码在java中URLEncoder.encode方法要调用两次解决
中文乱码在java中URLEncoder.encode方法要调用两次解决 一.场景: 1.我在客户端要通过get方式调用服务器端的url,将中文参数做utf-8编码,需要在js中两次的进行编码,服务器 ...
- 2018-8-10-WPF-编译为-AnyCPU-和-x86-有什么区别
title author date CreateTime categories WPF 编译为 AnyCPU 和 x86 有什么区别 lindexi 2018-08-10 19:16:53 +0800 ...
- Java练习 SDUT-1160_某年某月的天数
C语言实验--某年某月的天数 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入年和月,判断该月有几天? Input ...
- 安装pip3遇到:E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
安装pip3遇到:E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution). 具 ...
- 自动编码(AE)器的简单实现
一.目录 自动编码(AE)器的简单实现 一.目录 二.自动编码器的发展简述 2.1 自动编码器(Auto-Encoders,AE) 2.2 降噪自编码(Denoising Auto-Encoders, ...
- laravel 的路由中间件
简介# Laravel 中间件提供了一种方便的机制来过滤进入应用的HTTP请求.例如,Laravel 内置了一个中间件来验证用户的身份认证 , 如果没有通过身份认证,中间件会将用户重定向到登陆界面,但 ...
- @bzoj - 5219@ [Lydsy2017省队十连测]最长路径
目录 @description@ @solution@ @accepted code@ @details@ @description@ 在Byteland一共有n个城市,编号依次为1到n,形成一个n个 ...
- linux服务器时间更新
yum install ntpdate ntpdate ntp1.aliyun.com(阿里云服务器时间)