線程池ThreadPoolExecutor

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

1)當池子大小小於corePoolSize就新建線程,並處理請求

2)當池子大小等於corePoolSize,把請求放入workQueue中,池子里的空閑線程就去從workQueue中取任務並處理

3)當workQueue放不下新入的任務時,新建線程入池,並處理請求,如果池子大小撐到了maximumPoolSize就用 RejectedExecutionHandler來做拒絕處理

4)當池子的線程數大於corePoolSize的時候,多餘的空閑線程會等待keepAliveTime長的時間,如果無請求可處理就自行銷毀

RejectedExecutionHandler

1. CallerRunsPolicy :當任務添加到線程池中被拒絕時,會在線程池當前正在運行的Thread線程池中處理被拒絕的任務。

2. AbortPolicy :對拒絕任務拋棄處理,並且拋出異常。SynchronousQueue也會拋出異常。

3. DiscardPolicy :對拒絕任務直接無聲拋棄,沒有異常信息。

4. DiscardOldestPolicy :對拒絕任務不拋棄,而是拋棄隊列裡面等待最久的一個線程,然後把拒絕任務加到隊列。(曾在UPOS項目中更新規則文件的版本)

鳴謝:Java多線程系列--「JUC線程池」05之 線程池原理(四) - 如果天空不死 - 博客園

推薦閱讀:

九章演算法 | Google 面試題:多餘的連接
浙江大學-數據結構-歸併排序-9.4.3
Leetcodes Solution 30 Substring with Concatenation of All Words
九章演算法 | Google 面試題:有效括弧字元串
數據結構3.5

TAG:並發 | 數據結構 |