【Java-线程池】
目录
什么是线程池:
线程池七大参数:
参数详细介绍:
1.核心线程数:
2.最大线程数:
3.线程存活时间:
4.时间单位:
5. 阻塞工作队列:
6.线程工厂:
7.拒绝策略:
线程池的执行流程:
线程池的常用方法:
线程池分类:
线程池的状态:
编辑
什么是线程池:
简单来说,线程池就是帮助我们创建并管理多个线程。
线程池(Thread Pool)是一种基于池化技术的多线程处理形式,用于管理线程的创建和生命周期,以及提供一个用于并行执行任务的线程队列。线程池的主要目的是减少在创建和销毁线程时所花费的开销和资源,提高程序性能,同时也提供了对并发执行任务的更好管理,例如控制线程数量。
线程池七大参数:
以ThreadPoolExecutor举例,线程池七大参数:1.核心线程数 2.最大线程数 3.线程存活时间 4.时间单位 5. 阻塞工作队列 6.线程工厂 7.拒绝策略。
参数详细介绍:
1.核心线程数:
线程池中能维护的最小线程数量,即使它们处于空闲状态也不会被回收,这样保证当新任务到来时能够快速进行响应。
2.最大线程数:
线程池允许创建的最大线程数(包含核心线程)。
3.线程存活时间:
非核心线程的存活时间(核心线程不会回收),当非核心线程的空闲时间大于存活时间就会被回收。
4.时间单位:
线程存活时间的时间单位(eg.TimeUnit.SECONDS 秒)
5. 阻塞工作队列:
用于存储待执行的任务。
6.线程工厂:
用于创建线程,以及自定义线程名称,需要实现ThreadFactory接口。
7.拒绝策略:
当线程池线程内部的线程耗尽,并且工作队列达到已满时,新提交的任务将使用拒绝策略进行处理。
线程池的执行流程:
线程池的常用方法:
void execute(Runnable command):提交线程任务
Future<T> submit(Callable<T> task):提交线程任务,可以获取线程执行结果
void shutdown():将线程池中的线程任务执行完毕后,关闭线程池
List<Runnable> shutdownNow():立刻关闭线程池,并返回未完成的线程任务
线程池分类:
通过实现不同方法对象分类
FixedThreadPool:固定大小线程池,线程数量固定,不会自动扩容或缩容。
CachedThreadPool:缓存线程池,线程数量不固定,根据需要自动扩容或缩容。适用于执行大量短时间任务的场景。
SingleThreadPool:单线程线程池,只有一个线程在工作,保证任务按顺序执行。
ScheduledThreadPool:定时任务线程池,用于执行定时任务和周期性任务。
线程池的状态:
RUNNING | 运行状态:接受新任务,持续处理任务队列里的任务 |
SHUTDOWN | 不再接受新任务,要处理任务队列里的任务 |
STOP | 不再接受新任务,也不再处理任务队列里的任务,中断正在执行的任务 |
TIDYING | 表示线程池正在停止运行,终止所有任务,销毁所有工作线程,当线程池执行 terminated()方法时,线程池进入TIDYING状态 |
TERMINATED | 表示线程池已停止运行,所有的工作线程已经被销毁,所有的任务已经被清空或者执行完毕,terminated() 方法执行完毕之后线程池进入此状态 |