线程池核心参数及其如何复用线程

173 阅读1分钟

一、核心参数

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler);



corePoolSize	//核心线程数
maximumPoolSize	//最大线程数
keepAliveTime	//核心线程超时干掉时间
workQueue	//任务队列
ThreadFactory//线程工厂
RejectedExecutionHandler//拒绝策略

二、核心线程、队列线程、拒绝策略控制规则

线程数量 = n
n > corePoolSize -> 进队列
n > corePoolSize && 队列满 -> n > maximumPoolSize ? 拒绝策略 : 创建线程

三、如何保证核心线程的存活

利用阻塞队列阻塞线程
Runnable r = timed ? workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS) : workQueue.take();
Work线程执行自己任务完毕会从队列中取任务执行,通过阻塞队列来控制线程保持还是消亡

四、如何保证核心线程的存活

当线程池中维护的线程数量  <  corePoolSize,线程不会复用会创建新的线程