- 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)這個構造方法