线程池-待补充
创建线程的方式有哪些?
一种是通过 Executors 创建,
另一种是通过 ThreadPoolExecutorPools 创建
创建方式的优缺点?
不建议使用 Executors 创建线程,建议使用 ThreadPoolExecutorPools 创建方式进行自定义配置,因为 Executors 创建方式的缺点是无法进行自定义配置,而 ThreadPoolExecutorPools 可以通过自定义配置来满足不同的需求。
线程池的参数有哪些
一共有七个参数。
- 第一个是核心线程数(corePoolSize),表示线程池中始终存在的线程数;
- 第二个是最大线程数(maximumPoolSize),表示线程池中允许的最大线程数,当线程池中的任务队列满了之后可以创建的最大线程数;
- 第三个是最大线程数可以存活的时间(maximumPoolSize),当线程中没有任务执行时,最大线程就会销毁一部分,最终保持核心线程数量的线程;
- 第四个是时间单位(unit),用于设定线程的存活时间,有七种可以选择,包括天、小时、分、秒、毫秒、微妙和纳秒;
- 第五个是一个阻塞队列(unit),用来存储线程池等待执行的任务,包含七种类型
ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。
LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。
SynchronousQueue:一个不存储元素的阻塞队列,即直接提交给线程不保持它们。
PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。
DelayQueue:一个使用优先级队列实现的无界阻塞队列,只有在延迟期满时才能从中提取元素。
LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。与SynchronousQueue类似,还含有非阻塞方法。
LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。 - 第六个是线程工厂(threadFactory),主要用来创建线程,默认为正常优先级,非守护线程;
- 第七个是拒绝策略(handler),用于拒绝处理任务时的策略,系统有四种可选。默认的策略为抛出异常。
AbortPolicy:拒绝并抛出异常
CallerRunsPolicy:使用当前调用的线程来执行任务
DiscardOldestPolicy:抛弃队列头部(最旧)的一个任务,并执行当前任务
DiscardPolicy:忽略并抛弃当前任务
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2020-01-12 java.Thread——多线程