首先,在了解线程池之前,你是否在大脑中提出过一个问题,什么是线程池?为什么要有线程池?
-
线程池
说到线程池,也许你应该听过和它具有同样效果的常量池和连接池。
通俗的讲就是一个池子(类),在这个池子中有多个线程,用来处理多个业务。 -
存在的意义:
首先要从线程的生命周期来看,一个线程必然要经历的过程有创建和销毁。当我们的某个业务模块要处理成千上万乃至上亿次请求时,如果该线程在每处理一次请求时总是进行重复的创建和销毁,那么对我们系统的压力是很大的,因此,某一天,有个程序员就想:要是这个线程一直存在,不就可以随时去调用它,节约了创建和销毁所带来的开销。
-
线程池的参数:
1、corePoolSize(核心线程数)
(1)核心线程会一直存在,即使没有任务执行
(2)当线程数小于核心线程数时,即使有空闲线程,也会一直创建线程直到大道和弦线程树
(3)设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭
2、queueCapacity(任务队列容量)
也叫阻塞队列,当核心线程都在运行,此时再有任务进来,会进入任务队列,排队等待线程执行。
3、maxPoolSize(最大线程数)
(1)线程池里允许存在的最大线程数量
(2)当任务队列已满,且线程数量大于等于核心线程数时,会创建新的线程执行任务
4、keepAliveTime(线程空闲时间)
(1)当线程空闲时间达到keepAliveTime时,线程会退出(关闭),直到线程数等于核心线程数
(2)如果设置了allowCoreThreadTimeout=true,则线程会退出知道线程数等于零
5、allowCoreThreadTimeout(允许核心线程超时)
6、rejectedExcutionHandler(任务拒绝处理器)
(1)当线程数量达到最大线程数,且任务队列已满时,会拒绝任务
(2)调用线程池shutdown()方法后,会等待执行完线程池的任务之后,再shutdown()。如果在调用了shutdown()方法和线程池真正shutdown()之间提交任务,会拒绝新任务。 -
处理流程:
图片来自:https://www.jianshu.com/p/7ab4ae9443b9
大概通俗的讲述了一下池的思想,谢谢