java 打造阻塞式线程池的实例详解

作者:steeven 时间:2022-09-13 09:50:33 

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,阻塞,线程池
0
投稿

猜你喜欢

  • 通过实例解析JMM和Volatile底层原理

    2023-05-20 19:10:48
  • 对Java的面对对象编程中对象和引用以及内部类的理解

    2022-02-22 12:11:15
  • Flutter 实现下拉刷新上拉加载的示例代码

    2023-08-18 21:31:16
  • Java 十大排序算法之希尔排序刨析

    2021-11-16 09:27:31
  • java中public class与class的区别详解

    2023-04-09 11:49:40
  • Java8中Stream的一些神操作

    2021-11-18 19:07:21
  • Java面向对象编程的三大特征

    2023-09-19 06:20:34
  • mybatis使用foreach查询不出结果也不报错的问题

    2023-11-24 22:36:17
  • Java面向对象编程(封装/继承/多态)实例解析

    2023-11-11 11:33:09
  • java二维数组指定不同长度实例方法

    2021-07-13 06:02:09
  • Druid基本配置及内置监控使用_动力节点Java学院整理

    2022-12-16 20:55:58
  • Android 通过SQLite数据库实现数据存储管理

    2023-09-28 11:31:59
  • 教你使用Java获取当前时间戳的详细代码

    2021-09-19 04:41:02
  • 解决Springboot get请求是参数过长的情况

    2023-11-27 16:45:37
  • Java如何在临界区中避免竞态条件

    2022-11-02 09:39:29
  • Lombok中@EqualsAndHashCode注解的使用及说明

    2023-11-30 04:47:05
  • 详解java中的PropertyChangeSupport与PropertyChangeListener

    2023-10-20 06:19:27
  • 微信公众号 网页授权登录及code been used解决详解

    2023-02-06 18:49:00
  • spring中bean的生命周期详解

    2021-11-29 23:31:02
  • Java基于zxing生成二维码矩阵过程解析

    2023-11-23 06:04:06
  • asp之家 软件编程 m.aspxhome.com