多線程學習 線程池TheadPoolExecutor的使用

創建一個線程池

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捕獲異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章