線程池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