ThreadPoolExecutor系列<一、ThreadPoolExecutor 机制>
本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7681529.html
解决问题:
1、 处理大量异步任务时能减少每个任务的资源开销;
2、 线程通过线程池管理,减少线程的资源开销;
3、 统计当前任务完成数量以及活跃线程数;
个人认为关键是线程池与任务队列如何完美协作
通过下图说明ThreadPoolExecutor机制
1. 线程池中现有线程(current threads) < corePoolSize(线程池基本线程)
i> 保证线程池中线程数量达到corePoolSize大小 (allowCoreThreadTimeOut=true 除外)
ii> 如果新提交一个任务(new task submitted),即使当前现有线程处于idle状态,线程池也会启动一个新的线程来处理该任务;
iii> 如果新提交一个任务(new task submitted),线程池(Executor)优先开启线程处理task,而不是进queue,
直到current threads >= corePoolSize时,new task 先进入queue然后等待处理;
2. corePoolSize(线程池基本线程) < 线程池中现有线程 < maximumPoolSize(线程池最大线程)
i> 如果新提交一个任务(new task submitted),只有当queue已满的情况下,线程池才会启动一个新的线程来处理,
否则只有等当前线程处理完任务后再来处理new task;
ii> 超过了线程驻留时间(Keep-alive time),超过的线程(currrent size - corePoolSize)终止,释放资源;
setKeepAliveTime动态调整驻留空闲时间;
3. 线程池中现有线程(current threads) > maximumPoolSize(线程池最大线程)
i> 如果新提交一个任务(new task submitted),线程池还是会创建一个新的线程,只不过new task 被拒绝(rejected);
new task 被拒绝(rejected)处理策略:
a> ThreadPoolExecutor.AbortPolicy : 运行时抛出异常(RejectedExecutionException)
b> ThreadPoolExecutor.CallerRunsPolicy: 该线程通过简单的反馈控制机制来重新处理该任务的请求,减慢任务入队列的时间,
从而达到线程处理任务的速度快于任务到达队列的速度;
优点:不抛出异常中断线程,不丢失任务;如下图
c> ThreadPoolExecutor.DiscardPolicy: 直接扔掉任务
d> ThreadPoolExecutor.DiscardOldestPolicy: 按照进入顺序扔掉队列另一端最先进入的任务,腾出空间,然后将新任务入队列;
ThreadPoolExecutor系列<一、ThreadPoolExecutor 机制>的更多相关文章
- Mybatis 系列6-结合源码解析节点配置:objectFactory、databaseIdProvider、plugins、mappers
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
- 死磕 java同步系列之CyclicBarrier源码解析——有图有真相
问题 (1)CyclicBarrier是什么? (2)CyclicBarrier具有什么特性? (3)CyclicBarrier与CountDownLatch的对比? 简介 CyclicBarrier ...
- 死磕 java同步系列之Phaser源码解析
问题 (1)Phaser是什么? (2)Phaser具有哪些特性? (3)Phaser相对于CyclicBarrier和CountDownLatch的优势? 简介 Phaser,翻译为阶段,它适用于这 ...
- 死磕 java同步系列之StampedLock源码解析
问题 (1)StampedLock是什么? (2)StampedLock具有什么特性? (3)StampedLock是否支持可重入? (4)StampedLock与ReentrantReadWrite ...
- 死磕 java同步系列之ReentrantReadWriteLock源码解析
问题 (1)读写锁是什么? (2)读写锁具有哪些特性? (3)ReentrantReadWriteLock是怎么实现读写锁的? (4)如何使用ReentrantReadWriteLock实现高效安全的 ...
- Mybatis 系列10-结合源码解析mybatis 的执行流程
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
- Mybatis 系列8-结合源码解析select、resultMap的用法
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
- Mybatis 系列7-结合源码解析核心CRUD 配置及用法
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
- Mybatis 系列5-结合源码解析TypeHandler
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
- Mybatis 系列4-结合源码解析节点:typeAliases
[Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...
随机推荐
- 201521123036 《Java程序设计》第4周学习总结
本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 继承:extends子类将获得父类的属性与方法,并具有自身特有的属性与方法 抽取共同特征(行为与属 ...
- Python3.x 和Python2.x 区别
1.性能Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果.Py3.1性能比Py2.5慢 ...
- 201521123031 《Java程序设计》第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...
- 从java的开始,java概述,java配置环境变量
一.java开发入门 java 概述 Java划分为三个技术平台:JavaSE(标准版,含Java基础类库),JavaEE(企业版,技术平台),JavaME(小型版,小型产品.嵌入式设备) Jav ...
- 纳税服务系统【统计图Fusionchart】
需求 我们在投诉模块中还有一个功能没有实现: 统计:根据年度将相应年度的每个月的投诉数进行统计,并以图表的形式展示在页面中:在页面中可以选择查看当前年度及其前4年的投诉数.在页面中可以选择不同的年度, ...
- IIS部署新网站
Windows Server使用IIS 6.0配置ASP动态Web网站 http://jingyan.baidu.com/article/c1a3101ee43ae9de656debb4.html h ...
- 新建maven项目遇到Select an Archetype时没有maven-archetype-webapp处理方法
[已经有很多博客写过相关的了.详细请去看其他博主的.这里只是记录新建的时候发生的问题给新手提供帮助.因为我跟我的同事都遇到了.因为没记录下来,又花了时间找问题.而网上好像也不多.所以记录下来.希望帮到 ...
- Vue.js的从入门到放弃进击录(二)
哇塞,昨晚更新的篇(一)这么多阅读量,看来入坑的人越来越多啦~熬了一个礼拜夜,今天终于生病惹~国庆要肥家咯·所以把篇(二)也更完.希望各位入坑的小伙伴能少跳几个坑呗.如果有什么不对的地方也欢迎讨论指正 ...
- 第6章 Overlapped I/O, 在你身后变戏法 ---被激发的 Event 对象 -4
以文件 handle 作为激发机制,有一个明显的限制,那就是没办法说出到底是哪一个 overlapped 操作完成了.如果每个文件 handle 只有一个操作等待决定,上述问题其实并不成为问题.但是如 ...
- Spring 5:以函数式方式注册 Bean
http://www.baeldung.com/spring-5-functional-beans 作者:Loredana Crusoveanu 译者:http://oopsguy.com 1.概述 ...