为什么阿里巴巴不允许使用Executors?
阿里巴巴開發手冊關于線程池有這樣一條規定:
線程池不允許使用 Executors 去創建,而是通過 ThreadPoolExecutor 的方式,這樣的處理方式讓寫的同學更加明確線程池的運行規則,規避資源耗盡的風險。
那你知道為什么阿里不推薦Executors去創建線程池嗎?因為要想合理的配置線程池,就必須首先分析任務特性,而Java自帶的Executors很顯然滿足不了你特殊的業務,所以我們盡可能的自定義線程,那如何自定義線程?
我們可以從以下幾個角度來進行分析:
1.任務的性質:CPU密集型任務,IO密集型任務和混合型任務。
2.任務的優先級:高,中和低。
3.任務的執行時間:長,中和短。
4.任務的依賴性:是否依賴其他系統資源,如數據庫連接。
任務性質不同的任務可以用不同規模的線程池分開處理。CPU密集型任務配置盡可能少的線程數量。IO密集型任務則由于需要等待IO操作,線程并不是一直在執行任務,則配置盡可能多的線程, 混合型的任務,如果可以拆分,則將其拆分成一個CPU密集型任務和一個IO密集型任務,只要這兩個任務執行的時間相差不是太大,那么分解后執行的吞吐率要 高于串行執行的吞吐率。
不同種類的任務,在我們日常開發又該如何配置線程池?做我們的任務做到降低資源消耗、提高響應速度、提高線程的可管理性等性能問題了?
別慌!你離線程池調優只差一個引路人,這次我們為大家開設了一堂大型互聯網線程池調優實戰訓練營,僅需0.02元,讓你徹底填補并發編程這塊的短板。
課程加餐福利:
1、自旋鎖&可重復鎖&公平鎖&共享鎖&分段鎖你都知道嗎?
2、無鎖&偏向鎖&輕量級鎖&重量級鎖如何膨脹升級?
3、Lock底層AQS實現與Synchronized底層實現異同?
4、LongAdder的分段CAS優化機制如何設計的?
5、Java多線程內存模型底層如何實現的?
6、volatile底層的內存屏障是如何實現的?
預習資料領取:
面試和開發過程中,理論和基礎都是開發人員都必須掌握的,尤其是開發越往后走,瓶頸期也越大。掌握并發編程的理論與實踐技術,將拉開與其他小伙伴的差距。
課程將深入大型互聯網并發線程池原理與調優實戰,避免在高并發的環境下遇到的一些問題。掃碼即刻購課:
?戳閱讀原文也可購課~
總結
以上是生活随笔為你收集整理的为什么阿里巴巴不允许使用Executors?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个@Transaction哪里来这么多
- 下一篇: 详解django三种文件下载方式