扫码阅读
手机扫码阅读
说一下线程池的核心参数,线程池的执行原理知道嘛

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

springboot葵花宝典
扫码关注公众号
线程池的核心参数
线程池的七大核心参数包括:
- corePoolSize: 核心线程数目。
- maximumPoolSize: 最大线程数目,包括核心线程和救急线程。
- keepAliveTime: 救急线程的最大存活时间,无任务则线程被回收。
- unit: 时间单位,例如秒或毫秒。
- workQueue: 当核心线程忙时,新任务进入队列等待。
- threadFactory: 线程工厂,自定义线程创建细节。
- handler: 拒绝策略,当线程繁忙且队列满时的处理策略。
线程池的执行原理
线程池在执行任务时:
- 先检查核心线程是否已满,未满则直接执行。
- 核心线程满,则检查阻塞队列是否已满,未满则加入队列。
- 阻塞队列满,检查线程数是否小于最大线程数,是则创建临时线程执行。
- 所有线程忙碌时,执行拒绝策略。
线程池的拒绝策略
拒绝策略包括:
- AbortPolicy: 默认策略,抛出异常。
- CallerRunsPolicy: 调用者线程自己执行任务。
- DiscardOldestPolicy: 丢弃队列最前的任务,执行新任务。
- DiscardPolicy: 直接丢弃任务。
常见阻塞队列
常用阻塞队列如下:
- ArrayBlockingQueue: 基于数组的有界队列。
- LinkedBlockingQueue: 基于链表的有界/无界队列。
- DelayedWorkQueue: 优先级队列,按执行时间排序。
- SynchronousQueue: 不存储元素的队列,插入操作需等待移除操作。
ArrayBlockingQueue与LinkedBlockingQueue的区别
特点 | LinkedBlockingQueue | ArrayBlockingQueue |
---|---|---|
边界 | 默认无界,支持有界 | 强制有界 |
底层结构 | 链表 | 数组 |
初始化 | 懒惰,创建时添加数据 | 提前初始化 |
加锁方式 | 两把锁(读写分离) | 单锁(读写共用) |
线程池的种类
java.util.concurrent.Executors类提供四种常见线程池:
- 固定线程数的线程池,使用LinkedBlockingQueue
- ...
适合于已知任务量且任务耗时的场景。
摘要: 本文介绍了线程池的核心参数、执行原理、拒绝策略以及常见阻塞队列。线程池的核心参数包括核心线程数、最大线程数、救急线程存活时间、时间单位、工作队列、线程工厂和拒绝策略。执行原理涉及核心线程和工作队列的检查以及救急线程的创建。拒绝策略有四种,包括抛出异常、调用者执行任务、丢弃最旧任务和直接丢弃任务。常用的阻塞队列有ArrayBlockingQueue和LinkedBlockingQueue等。ArrayBlockingQueue是有界队列,基于数组,初始化时创建所有节点,使用单一锁。LinkedBlockingQueue可无界也可有界,基于链表,新增数据时创建节点,使用两把锁。最后,介绍了java.util.concurrent.Executors类提供的四种线程池,其中固定线程数的线程池使用LinkedBlockingQueue,适用于任务量已知且耗时的任务。想要了解更多内容?

springboot葵花宝典
扫码关注公众号
了解过Mysql索引吗?(什么是索引)
上一篇
没有了
下一篇
springboot葵花宝典的其他文章
探索强大的Elasticsearch(ES):现代搜索与分析引擎
大数据时代带来了海量的信息和数据如何高效地管理、搜索和分析这些数据成为了企业和组织面临的重要挑战。Elasticsearch应运而生,广泛用于各种领域,从企业搜索、日志分析到监控系统,为用户提供了快速、准确的数据搜索和分析功能。
Spring Cloud Alibaba 注册中心 Nacos 入门
今天主要讲解了Nacos注册中心、Nacos Client(消费者和服务者创建)的搭建过程。
SpringBoot-9-Spring Boot进阶篇:实现配置修改热部署,提升开发效率
Spring Boot进阶篇:实现配置修改热部署,提升开发效率
Spring Boot 如何监控 SQL 运行情况?
Spring Boot 如何监控 SQL 运行情况?
用了这个 Java 小工具,我废了
在开发过程中,我们经常需要编写很多与业务无关的
加入社区微信群
与行业大咖零距离交流学习


PMO实践白皮书
白皮书上线
白皮书上线