Java併發編程的藝術讀書筆記(第十章)

第十章-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 對時間進行了排序,時間短的將會先執行,所以適合做定時任務用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章