一、ThreadPoolExcutor创建线程池构造器:
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { ... }
二、参数说明
2.1 corePoolSize
原注释: corePoolSize the number of threads to keep in the pool, even if they are idle, unless {@code allowCoreThreadTimeOut} is set
1. 在线程池中保留的线程数,即使它们是空闲的,除非设计了allowCoreThreadTimeOut。 当设置了allowCoreThreadTimeOut为true时(默认是false),线程池中corePoolSize线程空闲时间达到keepAliveTime时将关闭 2. 当线程数<corePoolSize时,即使此时线程池中存在空闲线程,新提交任务将创建一个新线程执行任务。 3. 当线程数>=corePoolSize时,则新任务放入workQueue中。 4. 当workQueue已满,且maximumPoolSize > corePoolSize时,创建新线程执行新任务 5. 当提交任务数=maximumPoolSize时,新任务将被拒绝,并由RejectedExecutionHandler处理 6. 当线程池中超过corePoolSize线程,空闲时间达到keepAliveTime时关闭
2.2 maximumPoolSize
原注释:the maximum number of threads to allow in the pool. 线程池中允许创建的最大线程数
2.3 keepAliveTime
原注释:when the number of threads is greater than the core, this is the maximum time that excess idle threads will wait for new tasks before terminating. 当线程数大于核心时,这是多余空闲线程在终止前等待新任务的最大时间。 如果将参数allowcorethreadtimeout=true,则这个线程的最大生命周期设置的超时时间也会作用于核心线程
2.4 unit
原注释:the time unit for the {@code keepAliveTime} argument keepAliveTime的时间单位,是一个枚举类型 NANOSECONDS : 1微毫秒 = 1微秒 / 1000 MICROSECONDS : 1微秒 = 1毫秒 / 1000 MILLISECONDS : 1毫秒 = 1秒 /1000 SECONDS : 秒 MINUTES : 分 HOURS : 小时 DAYS : 天
2.5 workQueue
原注释: the queue to use for holding tasks before they are executed. This queue will hold only the {@code Runnable} tasks submitted by the {@code execute} method. 线程阻塞队列,当核心线程均在工作时,新任务将放进阻塞队列中。
2.6 threadFactory
原注释: the factory to use when the executor creates a new thread 线程池创建新线程的工厂
2.7 handler
原注释: the handler to use when execution is blocked because the thread bounds and queue capacities are reached 拒绝任务处理器(拒绝策略),四种策略: AbortPolicy: 默认策略,不执行此任务,而是直接抛出一个运行时异常 CallerRunsPolicy: 任务被拒绝添加后,会再次调用execute(submit)来执行被拒绝的任务 DiscardOldestPolicy: workQueue中抛弃head的一个任务,再次execute此任务 DiscardPolicy: 直接抛弃,任务不执行