創(chuàng)建線程池的構造函數(shù)如下:
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.acc = System.getSecurityManager() == null ? null : AccessController.getContext(); this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.workQueue = workQueue; this.keepAliveTime = unit.toNanos(keepAliveTime); this.threadFactory = threadFactory; this.handler = handler; }
?
corePoolSize? ? ? ? | 核心線程數(shù),線程池中最小線程數(shù),即使線程空閑,也不會被銷毀;任務首先提交到核心線程中執(zhí)行。(初始化時不創(chuàng)建線程,提交任務時創(chuàng)建線程)(如果設置allowCoreThreadTimeOut為true,核心線程也會被銷毀,使用較少) |
maximumPoolSize | 線程池中允許創(chuàng)建的最大線程數(shù)。 |
keepAliveTime | 當線程數(shù)大于corePoolSize時,線程最多等待keepAliveTime時間后,將被銷毀。 |
unit | keepAliveTime參數(shù)的時間單位,一般為毫秒。 |
workQueue | 提交任務的緩存隊列。 |
threadFactory | 創(chuàng)建線程的工廠。 |
handler | 當corePoolSize已滿,緩存隊列已滿,maximumPoolSize已滿時,又發(fā)生任務提交時的處理器。 |
?
提交任務時:
如果線程數(shù)小于核心線程數(shù)(corePoolSize)(或者核心線程有空閑),則新創(chuàng)建線程(或者使用空閑線程)執(zhí)行任務;
如果線程數(shù)等于核心線程數(shù),則將任務緩存到隊列(workQueue);
如果緩存隊列已滿,則繼續(xù)創(chuàng)建線程執(zhí)行任務,直到達到最大線程數(shù);
如果線程數(shù)達到最大線程數(shù)(maximumPoolSize),再提交任務,將使用handler來處理無法處理的任務。
本文摘自 :https://www.cnblogs.com/