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方法