JUC之线程池
线程池本质上就是管理一组线程,用来完成提交给线程池的任务。提交任务,可以调用线程池的submit方法,把实现了Runnable和Callable的任务对象,提交给线程池;而线程池就可以创建出线程对象来执行任务。
创建的线程分为两类:核心线程和救急线程。核心线程就是,当线程执行完任务之后,依然要保留到线程池中的线程;而救急线程,则是执行完任务之后,如果没有别的任务了,就不需要保留到线程池中的线程。两者的数目可以通过创建线程池的参数进行控制。当救急线程执行完任务,空闲下来的时候,它不会一直保留在池中,而是经过一段时间,即keepAliveTime
,如果这段时间里,该线程没有接到其他任务,那么就会在经过这段时间后销毁。
workQueue
任务队列起到对任务的缓冲作用。当任务来临,线程池就会通过threadFactory
线程工厂来创建核心线程执行任务;如果核心线程数已经达到corePoolSize
,这时就会把任务放到workQueue
中,等到核心线程完成了当前的任务,空闲下来了,就会对从workQueue
中取出任务执行;如果把任务放到workQueue
时,发现workQueue
中的任务数量以达到其容量(一般,我们会对workQueue
的容量设置一个可以达到的上限,从而避免内存紧张),那么这个时候就会生成救急线程来执行;当救急线程数量也达到最大的时候,即线程池中所有线程的数量达到了maximumPoolSize
,就会根据handler
拒绝策略进行处理。
线程池的核心参数
corePoolSize
核心线程数目:最多保留的线程数maximumPoolSize
最大线程数目:(核心线程数 + 救急线程数)的最大数目keepAliveTime
生存时间:针对救急线程unit
生存时间的单位:针对救急线程workQueue
:阻塞队列threadFactory
线程工厂:可以为线程创建时起个好名字handler
拒绝策略:有4种
JUC之线程池
https://jlqusername.github.io/2025/03/29/JUC之线程池/