适合场景:大量的小任务(每个任务处理快,不会频繁出现线程处理一半时,切换其他线程) 。
ScheduledThreadPool
public ScheduledThreadPoolExecutor(int corePoolSize) { super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue()); }我们可以看到该线程池的corePoolSize核心线程数量和maximumPoolSize最大线程数量都是1,代表该线程有且只有一个固定的线程,既然是单线程,所以该线程池实现的是串行操作,没有并发效果 。workQueue是LinkedBlockingQueue,这是一个链表阻塞队列 。所以该线程池适合执行串行执行队列中的任务 。
适合场景:按顺序串行处理的任务 。
可能读者会好奇keepAliveTime为0代表的含义? 是立即回收线程还是永不回收呢?
keepAliveTime参数注释明确指明只对非核心线程有用 。我们可以从ScheduledThreadPool的源码中推测,如果0代表是永不回收的话,那么ScheduledThreadPool一旦创建出非核心线程的话就不会回收了?这样是很不合理的 。所以笔者认为0代表立即回收 。
public ScheduledThreadPoolExecutor(int corePoolSize) { super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue()); }此文章如有错误恳请评论指正 。希望能通过这篇文章让大家对线程池有更深的理解 。
最后,需要关于分布式,微服务,性能优化,Spring,MyBatis,MySQL数据库等等的源码知识点请关注我哦!还有各种常见面试题详解 。(关注+转发,私信我“学习”,就可以领取架构资料了哦!)
我是小架,祝大家工作上能够事业有成,学习上也可以打破瓶颈一路向上!
【10年架构师经验带你详细解析四种线程池】
推荐阅读
- Java集合之深度剖析集合架构
- 汽车要开10年以上,以下养车用车小技巧要学会
- 劳动仲裁员工胜算大吗?律师告诉你,搞清这4点赢的机会更大
- 南京中山陵茶场,国宝级炒茶师献艺炒制雨花茶
- 梅林,品茶泡茶从赏器开始 茶艺师培训很浮
- 帮邻居买好茶 茶艺师成茶叶代购员
- 原地热车究竟有啥作用?不少老司机都搞不明白,看看维修师傅怎么说?
- 详谈4大主流CPU处理器技术架构
- 律师|疫情之下,你知道赚钱的职业还有哪些吗?
- 厨师|柬埔寨!招聘厨师是假的,把他们卖给互联网投资公司是真的