java线程池的七⼤参数(简单明了)
⾸先先来看看ThreadPoolExecutor最底层的参数
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler){
if(corePoolSize <0||
maximumPoolSize <=0||
maximumPoolSize < corePoolSize ||
keepAliveTime <0)
throw new IllegalArgumentException();
if(workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.maximumPoolSize = maximumPoolSize;
this.workQueue = workQueue;
this.keepAliveTime = Nanos(keepAliveTime);
this.threadFactory = threadFactory;
this.handler = handler;
java线程池创建的四种
}
1. corePoolSize:线程池中的常驻核⼼线程数。
2.maximumPoolSize:线程池中能够容纳同时执⾏的最⼤线程数,此值必须⼤于等于1。
3.keepAliveTime:多余的空闲线程的存活时间当前池中线程数量超过corePoolSize时,当空闲时间达eepAliveTime时,多余线程会被销毁直到只剩下corePool Size个线程为⽌。
4.unit:keepAliveTime的单位。
5.workQueue:任务队列,被提交但尚未被执⾏的任务。
6.threadFactory:表⽰⽣成线程池中⼯作线程的线程⼯⼚,⽤于创建线程,⼀般采取默认的即可。
7.handler:拒绝策略,表⽰当队列满了,并且⼯作线程⼤于等于线程池的最⼤线程数(maximumPoolSize)时如何来拒绝请求执⾏的runnable的策略。
1、在创建了线程池后,线程池中的线程数为零。
2、当调⽤execute()⽅法添加⼀个请求任务时,线程池会做出如下判断:
2.1如果正在运⾏的线程数量⼩于corePoolSize,那么马上创建线程运⾏这个任务;
2.2如果正在运⾏的线程数量⼤于或等于corePoolSize,那么将这个任务放⼊队列;
2.3如果这个时候队列满了且正在运⾏的线程数量还⼩于maximumPoolSize,那么还是要创建⾮核⼼线程⽴刻运⾏这个任务;
2.4如果队列满了且正在运⾏的线程数量⼤于或等于maximumPoolSize,那么线程池会启动饱和拒绝策略来执⾏。
3、当⼀个线程完成任务时,它会从队列中取下⼀个任务来执⾏。
4、当⼀个线程⽆事可做超过⼀定的时间(keepAliveTime)时,线程会判断:
如果当前运⾏的线程数⼤于corePoolSize,那么这个线程就被停掉。
所以线程池的所有任务完成后,它最终会收缩到corePoolSize的⼤⼩。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论