#私藏项目实操分享#Java多线程下载器项目实例之线程池

少年辛苦终身事,莫向光阴惰寸功。这篇文章主要讲述#私藏项目实操分享#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
优先任务队列,可以根据任务优先级顺序执行任务

    推荐阅读