解释
1.corePoolSize:核心线程数(同时处理的能力)
2.queueCapacity:队列容量(队列只存在任务,不存在线程)
3.maxPoolSize:最大线程数;决定了当corePoolSize 以及queueCapacity 满了以后,会在线程中额外创建线程.最大线程数指的是当前存在的最大的线程数。队列中的不属于
假如corePoolSize和queueCapacity均为5,而maxPoolSize等于12.那么当线程大于12的时候(也就是corePoolSize,queueCapacity都满且额外创建了7个线程,依旧有线程过来),那么大于12的线程会走拒绝策略,也就是maxPoolSize=corePoolSize+x(个线程(非队列))
4.keepAliveSeconds:当任务处理完以后,线程池中的线程数还大于corePoolSize,那么多余的
线程会被回收。也就是超时回收时间
关系
corePoolSize:当线程数小于corePoolSize个的时候,正常创建线程
queueCapacity:当线程大于corePoolSize个的时候,将线程放入queueCapacity大小的队列
maxPoolSize:当queueCapacity队列已满,将会继续创建线程,直到线程数超过maxPoolSize的大小,将抛出异常
问题
1.maxPoolSize < corePoolSize+queueCapacity
答: 可以,没有直接关系因为maxPoolSize = corePoolSize+x 其中x 必须是queueCapacity满了才有
2.maxPoolSize < corePoolSize
不可以,会报错,源码要求maxPoolSize必须大于等于corePoolSize