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

Posted link可

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#私藏项目实操分享#Java多线程下载器项目实例之线程池相关的知识,希望对你有一定的参考价值。

线程池简介

线程在创建,销毁的过程中会消耗一些资源,为了节省这些开销,jdk添加了线程池。线程池节省了开销,提高了线程使用的效率。阿里巴巴开发文档中建议在编写多线程程序的时候使用线程池。

1. ThreadPoolExecutor构造方法参数

在juc包下提供了ThreadPoolExecutor类,可以通过该类来创建线程池,这个类中有4个重载的构造方法,最核心的构造方法是有7个形参的,这些参数所代表的意义如下:

· corePoolSize

线程池中核心线程的数量

· maximumPoolSize

线程池中最大线程的数量,是核心线程数量和非核心线程数量之和

· keepAliveTime    

非核心线程空闲的生存时间

· unit    

keepAliveTime的生存时间单位

· workQueue

当没有空闲的线程时,新的任务会加入到workQueue中排队等待

· threadFactory

线程工厂,用于创建线程

· handler

拒绝策略,当任务太多无法处理时的拒绝策略

2. 线程池工作过程

#私藏项目实操分享#Java多线程下载器项目实例之线程池_构造方法

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实现基于朴素贝叶斯的情感词分析

一文了解 Python 中的迭代器 #私藏项目实操分享#

#私藏项目实操分享#愚公系列2022年05月 Python教学课程 72-DRF框架之认证和权限

#私藏项目实操分享# Angular @HostListener 装饰器的使用笔记