Spring ThreadPoolTaskExecutor队列满的异常处理
2024-09-05 18:09:06
<!-- 配置线程池 -->
<bean id="threadPool" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="keepAliveSeconds" value="30000" />
<property name="maxPoolSize" value="50" />
<property name="queueCapacity" value="100" />
</bean>
corePoolSize:默认开启线程数;maxPoolSize:最大线程数;queueCapacity:缓冲任务队列的长度;
创建线程的方式:
创建线程的方式:
@Autowired
private ThreadPoolTaskExecutor threadPool;
threadPoolTaskExecutor.execute(new Runnable() {
public void run() {
//异步任务
}
});
public void run() {
//异步任务
}
});
Spring ThreadPoolTaskExecutor没有使用阻塞模式将任务加入到对象中,因此对象满的时候会抛出异常,对于这种情况,一般的企业执行环境不能无限制的增大内存队列容量,因此不得不阻塞队列的加入,spring内置提供的异常处理机制不好用,因为ThreadPoolExecutor.CallerRunsPolicy的处理方式是将异常任务放在调用线程中执行,这样对于单个执行时间长的任务,即使队列有空闲了,剩下的任务也要等这个任务在主线程执行完了才能继续往队列里面添加。有一个处理方法就是捕获executor.execute()的异常,只要发现有异常就等待一段时间,直到没有异常为止,这样就能模仿阻塞队列的效果,下面是代码:
while(true){
try{
taskExecutor.execute(new MailSender(tUserIssueInfo));
break;
}catch(TaskRejectedException e){
try{
Thread.sleep(1000);
}catch(Exception e2){}
}
}
最新文章
- 多项目并行开发如何做到快速切换——sublime Text3
- 天气预报API(六):中国气象频道、腾讯天气--“新编码”接口的测试
- [异常解决] 安卓6.0权限问题导致老蓝牙程序出现异常解决办法:Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission...
- Extjs 使用图标字体来美化按钮)
- powershell脚本闪电输入神器
- 免费的HTML5连载来了《HTML5网页开发实例详解》连载(六)媒体查询
- linux 虚拟机centos64位_6.5+VM10 主机是固定IP局域网设置代理上网,虚机设置固定ip 图文详细步骤
- cocos2d-x Android环境搭建
- MySQL命令无法结束
- WPF 单个触发器、多个触发器、多条件触发器
- Java 集合的简单理解
- poj 2559(栈的应用)
- linux常用命令和关闭防火墙
- Hadoop生态集群MapReduce详解
- c#构造函数对string类型赋初值
- webpack性能优化-实战
- [svc]caffe安装笔记
- python的数据类型,数字,布尔,字符串
- 三十三 Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection)
- Java节假日算法
热门文章
- the referenced script on this behaviour is missing!
- FFMPEG实现H264的解码(从源代码角度)
- java将白色背景图片转换成透明图片
- Asp.Net页面生命周期【转载,地址:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html】
- python setuptools安装
- mysql root密码忘记重置
- web攻击之八:溢出攻击(nginx服务器防sql注入/溢出攻击/spam及禁User-agents)
- 杂项:zabbix(WEB界面的提供分布式系统监视以及网络监视功能)
- Python模块-sys模块
- nop前端分页实现思路及步骤