第十章-Executor框架
《阿里巴巴Java開發手冊》中強制線程池不允許使用 Executors 去創建,而是通過 ThreadPoolExecutor 的方式,這樣的處理方式讓寫的同學更加明確線程池的運行規則,規避資源耗盡的風險。
由上節我們知道,如果由Executor框架直接創建的線程池
- FixedThreadPool 和 SingleThreadExecutor : 允許請求的隊列長度爲 Integer.MAX_VALUE,可能堆積 大量的請求,從而導致OOM。
- CachedThreadPool 和 ScheduledThreadPool : 允許創建的線程數量爲 Integer.MAX_VALUE ,可能會創建大量線程,從而導致棧溢出。
所以上面的建議是我們根據自己的需求去創建線程池,這樣才能確保我們不會錯誤的使用Java爲我們提供的方法。
Executor框架結構
從上面可以看出,我們創建線程池主要通過ThreadPoolExecutor 和 ScheduleThreadPoolExecutor。 然後我們線程如果有返回值的話將返回 FutureTask 對象,使用該對象的get拿到返回值。
ThreadPoolExecutor
看看它的構造函數
參數意思上章有講。
ScheduleThreadPoolExecutor
- 使用了PriorityQueue 對時間進行了排序,時間短的將會先執行,所以適合做定時任務用。