ThreadPoolExecutor參數的含義 https://www.jianshu.com/p/0e228dc30793
資料
1. **** 線程池之ThreadPoolExecutor使用 https://www.jianshu.com/p/f030aa5d7a28
2.**** 線程池拒絕策略及有界無界隊列 https://www.jianshu.com/p/80b14c4c1ff4
線程池類為 java.util.concurrent.ThreadPoolExecutor,常用構造方法為:
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)
- corePoolSize: 核心線程池大小
- maximumPoolSize: 最大線程池大小
- keepAliveTime: 線程最大空閑時間
//當線程池中的線程數量大於 corePoolSize 時,如果某線程空閑時間超過 keepAliveTime ,線程將被終止。
這樣,線程池可以動態的調整池中的線程數。
- unit: 線程池維護線程所允許的空閑時間的單位
unit可選的參數為java.util.concurrent.TimeUnit中的幾個靜態屬性:
NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。納秒、微秒、毫秒、秒
- workQueue: 線程池使用的緩沖隊列
ThreadPoolExecutor線程池的API文檔中,一共推薦了三種等待隊列,
它們是:SynchronousQueue、LinkedBlockingQueue和ArrayBlockingQueue;
同步隊列 鏈接阻塞隊列 數組阻塞隊列
- threadFactory: ThreadFactory 線程工廠,用於創建線程
- handler: 線程池的拒絕策略
問題
1.拒絕策略什么時候使用
核心線程 corePoolSize 、任務隊列 workQueue 、最大線程 maximumPoolSize ,如果三者都滿了,使用
handler處理被拒絕的任務。
handler有四個選擇:
ThreadPoolExecutor.AbortPolicy()
拋出java.util.concurrent.RejectedExecutionException異常
ThreadPoolExecutor.CallerRunsPolicy()
重試添加當前的任務,他會自動重復調用execute()方法
ThreadPoolExecutor.DiscardOldestPolicy()
拋棄舊的任務
ThreadPoolExecutor.DiscardPolicy()
拋棄當前的任務