少年辛苦终身事,莫向光阴惰寸功。这篇文章主要讲述#私藏项目实操分享#Java多线程下载器项目实例之线程池相关的知识,希望能为你提供帮助。
线程池简介线程在创建,销毁的过程中会消耗一些资源,为了节省这些开销,jdk添加了线程池。线程池节省了开销,提高了线程使用的效率。阿里巴巴开发文档中建议在编写多线程程序的时候使用线程池。
1.
ThreadPoolExecutor构造方法参数
在juc包下提供了ThreadPoolExecutor类,可以通过该类来创建线程池,这个类中有4个重载的构造方法,最核心的构造方法是有7个形参的,这些参数所代表的意义如下:
·
corePoolSize
线程池中核心线程的数量
·
maximumPoolSize
线程池中最大线程的数量,是核心线程数量和非核心线程数量之和
·
keepAliveTime
非核心线程空闲的生存时间
·
unit
keepAliveTime的生存时间单位
·
workQueue
当没有空闲的线程时,新的任务会加入到workQueue中排队等待
·
threadFactory
线程工厂,用于创建线程
·
handler
拒绝策略,当任务太多无法处理时的拒绝策略
2.
线程池工作过程
3.
线程池的状态
线程池中有5个状态,分别是:
·
RUNNING
创建线程池之后的状态是RUNNING
·
SHUTDOWN
该状态下,线程池就不会接收新任务,但会处理阻塞队列剩余任务,相对温和。
·
STOP
该状态下会中断正在执行的任务,并抛弃阻塞队列任务,相对暴力。
·
TIDYING
任务全部执行完毕,活动线程为 0 即将进入终止
·
TERMINATED
线程池终止
4.
线程池的关闭
线程池使用完毕之后需要进行关闭,提供了以下两种方法进行关闭
·
shutdown()
该方法执行后,线程池状态变为 SHUTDOWN,不会接收新任务,但是会执行完已提交的任务,此方法不会阻塞调用线程的执行。
·
shutdownNow()
该方法执行后,线程池状态变为 STOP,不会接收新任务,会将队列中的任务返回,并用 interrupt 的方式中断正在执行的任务。
5.
工作队列
jdk中提供的一些工作队列workQueue
·
SynchronousQueue
直接提交队列
·
ArrayBlockingQueue
有界队列,可以指定容量
【#私藏项目实操分享#Java多线程下载器项目实例之线程池】·
LinkedBlockingDeque
无界队列
·
PriorityBlockingQueue
优先任务队列,可以根据任务优先级顺序执行任务
推荐阅读
- #yyds干货盘点#--三分钟搭建一套内网的yum本地源
- C# 扫描识别图片中的文字(.NET Framework)
- 从一次 SQL 查询的全过程看 DolphinDB 的线程模型
- #星光计划2.0# linux内核增加HDF驱动子系统
- 学习Java必备的基础知识打卡12.16,要想学好必须扎实基本功(?建议收藏)#yyds干货盘点#
- Python | Python常用函数方法示例总结(API)#yyds干货盘点#
- 声临其境,轻松几步教你把音频变成3D环绕音
- #yyds干货盘点# MySQL性能优化(如何高效正确的使用索引)
- 更强大更灵活更全面丨一文搞懂DolphinDB窗口计算