线程池的几个主要参数的作用和运行原理
贴源码
为了形象的理解线程池,我们将它比作是一个理发店
corePoolSize(5) 核心线程数
就是里面 5位理发师 接待5个顾客
workQueue(2) 阻塞队列
就好比 第6个和第7个客户来了 此时5位理发师都在工作,那不好意思了 请坐在凳子上稍等一下
maximumPoolSize 最大线程数(6)
如果第8个顾客来了 这家伙顾客越来越多 不能让等太久了,所以店长(第6个线程)出来接待顾客
unit:这个用来指定keepAliveTime的单位,比如秒:TimeUnit.SECONDS
keepAliveTime (30分钟)空闲线程最大存活时间
超出corePoolSize大小的那些线程(店长) 如果店长接待完了第8个顾客 然后没有要接待的顾客了 等了30分钟 、
依然没有要接待的顾客 那么这时候店长就休息了
RejectedExcutionHandlder: 当workQueue已经满了,并且线程池线程数已经达到maximumPoolSize,将执行拒绝策略
当第9个顾客来时,有两个人依然在等待 6个理发师(5个理发师加店长)都在工作,此时已经不能再接待顾客了,所以将谢绝来客
threadFactory:线程工厂,用来创建线程,主要是为了给线程起名字,默认工厂的线程名字:pool-1-thread-3。