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