創建一個線程池
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
corePoolSize: 最小線程數
maximumPoolSize:最大先線程數
keepAliveTime,unit:空閒超時策略
workQueue:排隊隊列
threadFactory:自定義創建線程策略
handler:自定義拒絕策略,通過handler指定的策略自定義拒絕方案,目前支持
CallerRunsPolicy
AbortPolicy
DiscardPolicy
DiscardOldestPolicy
注意事項
強烈建議使用有界隊列:無界隊列容易導致oom,而oom會導致所有的請求不可用。使用executor創建線程池,會導致oom問題,因爲很多隊列都使用
甚用默認拒絕策略:默認拒絕會拋出運行異常,運行異常在編譯階段不會強制catch。這樣會導致線程停止,但是最重要的是沒有任何通知,這樣會導致開發者以爲任務正常執行。處理這類問題,最穩妥的還是try catch捕獲異常。