Executors創建的線程有兩類
- newFixedThreadPool和newSingleThreadExecutor,隊列數量彈性,創建的線程的隊列最大值為INTEGER.max容易造成OOM
- newCachedThreadPool和newScheduledThreadPool,線程數量彈性,創建的線程數量最大值為INTEGER.max容易造成OOM
ThreadPoolExecutor的構造方法參數
可以定制你需要的線程池參數:
- corepoolsize 最小線程數,一般設置為服務器核心數量
- maxpoolsiz 最大線程數,當隊列滿后會擴容到最大線程數
- keepalivetime 當線程池中線程數大於corepoolsize 並且無新增任務時,銷毀等待的最大時間。
- unit 銷毀時間單位
- workQueue 工作隊列
- handler 飽和策略。當現在同時進行的任務數量大於最大線程數量並且隊列也已經放滿后,線程池采取的一些策略
- AbortPolicy直接拋出異常,RejectedExecutionException.
- CallerRunsPolicy ,調用執行自己的線程來完成任務,當您的任務不能拋棄時采取這個策略,這個策略會給系統帶來額外的開銷,影響性能。
- DiscardPolicy 直接拋棄掉
- DiscardOldestPolicy 丟棄掉最老的任務。
execute流程
流程說明
- 這里注意一點只有等待隊列里放滿后,核心線程數才會逐步增加到最大線程數。
- 流程就按照圖中的處理機制,就不加以詳細說明了,有何問題歡迎留言。