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,阻塞,线程池
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
通过实例解析JMM和Volatile底层原理
2023-05-20 19:10:48
![](https://img.aspxhome.com/file/2023/1/62201_0s.png)
对Java的面对对象编程中对象和引用以及内部类的理解
2022-02-22 12:11:15
Flutter 实现下拉刷新上拉加载的示例代码
2023-08-18 21:31:16
![](https://img.aspxhome.com/file/2023/8/88668_0s.gif)
Java 十大排序算法之希尔排序刨析
2021-11-16 09:27:31
![](https://img.aspxhome.com/file/2023/7/68137_0s.png)
java中public class与class的区别详解
2023-04-09 11:49:40
Java8中Stream的一些神操作
2021-11-18 19:07:21
![](https://img.aspxhome.com/file/2023/9/68169_0s.png)
Java面向对象编程的三大特征
2023-09-19 06:20:34
![](https://img.aspxhome.com/file/2023/8/58478_0s.png)
mybatis使用foreach查询不出结果也不报错的问题
2023-11-24 22:36:17
![](https://img.aspxhome.com/file/2023/6/60116_0s.png)
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
![](https://img.aspxhome.com/file/2023/1/86741_0s.png)
教你使用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
![](https://img.aspxhome.com/file/2023/4/64204_0s.png)
详解java中的PropertyChangeSupport与PropertyChangeListener
2023-10-20 06:19:27
微信公众号 网页授权登录及code been used解决详解
2023-02-06 18:49:00
![](https://img.aspxhome.com/file/2023/8/65768_0s.png)
spring中bean的生命周期详解
2021-11-29 23:31:02
Java基于zxing生成二维码矩阵过程解析
2023-11-23 06:04:06
![](https://img.aspxhome.com/file/2023/5/59845_0s.png)