#私藏项目实操分享#Java多线程下载器项目实例之线程池
Posted link可
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#私藏项目实操分享#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
有界队列,可以指定容量
· LinkedBlockingDeque
无界队列
· PriorityBlockingQueue
优先任务队列,可以根据任务优先级顺序执行任务
以上是关于#私藏项目实操分享#Java多线程下载器项目实例之线程池的主要内容,如果未能解决你的问题,请参考以下文章
#私藏项目实操分享#原理讲解-项目实战 <-; 多目标跟踪算法之DeepSORT
SpringBoot整合Redis 之 lettuce #私藏项目实操分享#
#私藏项目实操分享# Java实现基于朴素贝叶斯的情感词分析