java 打造阻塞式线程池的实例详解
发布时间 - 2026-01-11 02:33:51 点击率:次java 打造阻塞式线程池的实例详解

原来以为tiger已经自带了这种线程池,就是在任务数量超出时能够阻塞住投放任务的线程,主要想用在JMS消息监听。
开始做法:
在ThreadPoolExcecutor中代入new ArrayBlockingQueue(MAX_TASK). 在任务超出时报错:RejectedExecutionException。
后来不用execute方法加入任务,直接getQueue().add(task), 利用其阻塞特性。但是发现阻塞好用了,但是任务没有被处理。一看Queue,晕啊,原来都在里面,任务池就没处理它。看样还是要走任务池。
最后自己重载了一个BlockedThreadPoolExecutor:
private ReentrantLock pauseLock = new ReentrantLock();
private Condition unpaused = pauseLock.newCondition();
@Override
public void execute(Runnable command) {
pauseLock.lock();
try {
while (getPoolSize()==getMaximumPoolSize() && getQueue().remainingCapacity()==0)
unpaused.await();
super.execute(command);//放到lock外面的话,在压力测试下会有漏网的!
} catch (InterruptedException e) {
log.warn(this, e);
} finally {
pauseLock.unlock();
}
}
@Override
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r,t);
try{
pauseLock.lock();
unpaused.signal();
}finally{
pauseLock.unlock();
}
}
多线程程序很容易出错,写好了要拼命的用压力测试,否则问题多多啊~~~
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持,如有疑问请留言或者到本站社区交流讨论!
# java
# 打造阻塞式线程池
# 阻塞式线程池实例详解
# Java countDownLatch如何实现多线程任务阻塞等待
# Java使用阻塞队列控制线程通信的方法实例详解
# Java多线程阻塞与唤醒代码示例
# 详解Java多线程编程中CountDownLatch阻塞线程的方法
# 详解Java多线程编程中LockSupport类的线程阻塞用法
# 聊聊Java中是什么方法导致的线程阻塞
# 压力测试
# 会有
# 好了
# 都在
# 如有
# 很容易
# 就没
# 希望能
# 要走
# 带了
# 谢谢大家
# 想用
# 多线程
# 疑问请
# 就是在
# 好用了
# getQueue
# add
# RejectedExecutionException
# execute
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
如何快速辨别茅台真假?关键步骤解析
教你用AI将一段旋律扩展成一首完整的曲子
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
如何在橙子建站上传落地页?操作指南详解
利用python获取某年中每个月的第一天和最后一天
HTML 中如何正确使用模板变量为元素的 name 属性赋值
创业网站制作流程,创业网站可靠吗?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
如何用已有域名快速搭建网站?
iOS验证手机号的正则表达式
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
BootStrap整体框架之基础布局组件
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
西安专业网站制作公司有哪些,陕西省建行官方网站?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
javascript基本数据类型及类型检测常用方法小结
如何快速搭建安全的FTP站点?
js代码实现下拉菜单【推荐】
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
香港服务器选型指南:免备案配置与高效建站方案解析
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel怎么实现模型属性的自动加密
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
焦点电影公司作品,电影焦点结局是什么?
如何实现javascript表单验证_正则表达式有哪些实用技巧
历史网站制作软件,华为如何找回被删除的网站?
网站优化排名时,需要考虑哪些问题呢?
如何快速启动建站代理加盟业务?
详解Huffman编码算法之Java实现
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
如何用低价快速搭建高质量网站?
浅谈Javascript中的Label语句
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
实例解析Array和String方法

