- ThreadPoolExecutor构造方法解释
1、public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue)
- 方法解释:用给定的初始参数和默认的线程工厂及被拒绝的执行处理程序创建新的 ThreadPoolExecutor。使用 Executors 工厂方法之一比使用此通用构造方法方便得多。
B、参数:
corePoolSize - 池中所保存的线程数,包括空闲线程。
maximumPoolSize - 池中允许的最大线程数。
keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
unit - keepAliveTime 参数的时间单位。
workQueue - 执行前用于保持任务的队列。此队列仅保持由 execute 方法提交的 Runnable 任务。
C、抛出:
IllegalArgumentException - 如果 corePoolSize 或 keepAliveTime 小于 0,或者 maximumPoolSize 小于等于 0,或者 corePoolSize 大于 maximumPoolSize。
NullPointerException - 如果 workQueue 为 null
D、执行流程
(1)、当池子的大小小于corePoolSize,threadFactory创建线程处理请求任务。
(2)、当池子的大小等于corePoolSize,就把任务放到workQueue,池子中的空闲线程就去workQueue中取任务并处理。
(3)、当workQueue中放不下新的任务时,新建线程入池,并处理请求,如果线程池中的线程数达到maximumPoolSize,就采用默认拒绝创建新的线程
(4)、当线程池中线程大于corePoolSize而小于maximumPoolSize时,多余的线程会等待keepAliveTime长时间, keepAliveTime的长时间无任务处理时就自动销毁
2、public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory)
- 方法解释:用给定的初始参数和默认被拒绝的执行处理程序创建新的 ThreadPoolExecutor。
B、参数:
corePoolSize - 池中所保存的线程数,包括空闲线程。
maximumPoolSize - 池中允许的最大线程数。
keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
unit - keepAliveTime 参数的时间单位。
workQueue - 执行前用于保持任务的队列。此队列仅保持由 execute 方法提交的 Runnable 任务。
threadFactory - 执行程序创建新线程时使用的工厂。
C、抛出:
IllegalArgumentException - 如果 corePoolSize 或 keepAliveTime 小于 0,或者 maximumPoolSize 小于等于 0,或者 corePoolSize 大于 maximumPoolSize。
NullPointerException - 如果 workQueue 或 threadFactory 为 null。
D、执行流程
(1)、当池子的大小小于corePoolSize,threadFactory创建线程处理请求任务。
(2)、当池子的大小等于corePoolSize,就把任务放到workQueue,池子中的空闲线程就去workQueue中取任务并处理。
(3)、当workQueue中放不下新的任务时,threadFactory新建线程入池,并处理请求,如果线程池中的线程数达到maximumPoolSize,就采用默认拒绝创建新的线程
(4)、当线程池中线程大于corePoolSize而小于maximumPoolSize时,多余的线程会等待keepAliveTime长时间, keepAliveTime的长时间无任务处理时就自动销毁
3、public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler)
A、方法解释:用给定的初始参数和默认的线程工厂创建新的 ThreadPoolExecutor。
B、参数:
corePoolSize - 池中所保存的线程数,包括空闲线程。
maximumPoolSize - 池中允许的最大线程数。
keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间。
unit - keepAliveTime 参数的时间单位。
workQueue - 执行前用于保持任务的队列。此队列仅由保持 execute 方法提交的 Runnable 任务。
handler - 由于超出线程范围和队列容量而使执行被阻塞时所使用的处理程序。
C、抛出:
IllegalArgumentException - 如果 corePoolSize 或 keepAliveTime 小于 0,或者 maximumPoolSize 小于等于 0,或者 corePoolSize 大于 maximumPoolSize。
NullPointerException - 如果 workQueue 或 handler 为 null。
D、执行流程
(1)、当池子的大小小于corePoolSize,创建线程处理请求任务。
(2)、当池子的大小等于corePoolSize,就把任务放到workQueue,池子中的空闲线程就去workQueue中取任务并处理。
(3)、当workQueue中放不下新的任务时,新建线程入池,并处理请求,如果线程池中的线程数达到maximumPoolSize,就采用RejectedExecutionHandler handler进行处理
(4)、当线程池中线程大于corePoolSize而小于maximumPoolSize时,多余的线程会等待keepAliveTime长时间, keepAliveTime的长时间无任务处理时就自动销毁
- 开发中常用的线程池
(1)、public static ExecutorService newFixedThreadPool(int nThreads)
A、说明:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。在任意点,在大多数 nThreads 线程会处于处理任务的活动状态。如果在所有线程处于活动状态时提交附加任务,则在有可用线程之前,附加任务将在队列中等待。如果在关闭前的执行期间由于失败而导致任何线程终止,那么一个新线程将代替它执行后续的任务(如果需要)。在某个线程被显式地关闭之前,池中的线程将一直存在。
参数:
nThreads - 池中的线程数
返回:
新创建的线程池
抛出:
IllegalArgumentException - 如果 nThreads <= 0
B:解释
newFixedThreadPool(int nThreads), nThreads表示线程池的固定大小,底层实现的原理为:new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
---à最终走的是public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)这个构造方法