1、什么是线程池?
线程池是一种管理线程的思想,它在程序启动时在内存中开辟出一块空间,里面存放众多线程。
2、什么情况下用线程池
a. 单个任务处理的时间比较短
b. 需要处理的任务数量较大
3、使用线程池的好处
a. 减少在创建和销毁线程上的开销
b. 提高响应速度
c. 重复利用线程
4、线程池的种类及其应用场景
a. 可缓存的线程池:该线程池没有核心线程,非核心线程数量可以无限多,当有需要的时候创建线程来执行任务
使用场景: 耗时少、任务量大的情况
b.周期性执行任务的线程池: 按照某种特定的计划执行线程中的任务,既有核心线程也有非核心线程
使用场景:执行周期性的任务
c. 单线程化的线程池:只有一条线程来执行任务
使用场景:有顺序任务的场景
d. 定长的线程池:有核心线程池,没有非核心线程。
4、创建线程池的参数
创建线程池后,默认情况下线程池中是没有任何线程的,只有当任务来临时才创建线程去执行任务。
当有任务来是,就会去创建线程,当线程池中的线程数达到核心线程数量后 ,再来任务时就会把到达的任务放到 任务队列中去,当任务队列满了,再来任务时,线程池会创建新的线程,直到线程数量达到 最大线程数量。
a. 核心线程数量:
b. 线程池的最大线程数量:
c. 任务队列:
d. 线程工厂:
e. 线程存活保持时间:
f. 线程池拒绝策略:
5、线程池在业务中的应用
a. 快速响应用户的请求: 用户发起的实时请求,服务追求响应时间。比如说用户要查看一个商品的信息,那么我 们需要将商品维度的一系列信息如商品的价格、优惠、库存、图片等等聚合起来,展示给用户。
将调用封装成任务并行的执行,缩短总体响应时间。 这种场景最重要的是获取最大的响应速度去满足用户, 所以调高 核心线程数量和 最大线程数量 这两个参数就行
b. 快速处理批量任务: 离线的大量计算任务,需要快速执行
6、线程池的任务拒绝策略
a. 直接丢弃
b. 丢弃队列中最老的任务
c. 抛异常
d. 将任务分给调用线程来执行