為什麼阿里巴巴要禁用Executors建立執行緒池?

2021-10-08 04:44:20 字數 2730 閱讀 4666

管理一組工作執行緒。通過執行緒池復用執行緒有以下幾點優點:

根據返回的物件型別建立執行緒池可以分為三類:

因為這些建立執行緒池的靜態方法都是返回threadpoolexecutor物件,和我們手動建立threadpoolexecutor物件的區別就是我們不需要自己傳建構函式的引數。threadpoolexecutor的建構函式共有四個,但最終呼叫的都是同乙個:

public threadpoolexecutor(int corepoolsize,

int maximumpoolsize,

long keepalivetime,

timeunit unit,

blockingqueueworkqueue,

threadfactory threadfactory,

rejectedexecutionhandler handler)

構造函式引數說明:

執行邏輯說明:

executors建立返回threadpoolexecutor物件的方法共有三種:

5.1executors#newcachedthreadpool方法

public static executorservice newcachedthreadpool()
當乙個任務提交時,corepoolsize為0不建立核心執行緒,synchronousqueue是乙個不儲存元素的佇列,可以理解為隊裡永遠是滿的,因此最終會建立非核心執行緒來執行任務。對於非核心執行緒空閒60s時將被**。**因為integer.max_value非常大,可以認為是可以無限建立執行緒的,在資源有限的情況下容易引起oom異常

5.2 executors#newsinglethreadexecutor方法

public static executorservice newsinglethreadexecutor()
singlethreadexecutor是單執行緒執行緒池,只有乙個核心執行緒

當乙個任務提交時,首先會建立乙個核心執行緒來執行任務,如果超過核心執行緒的數量,將會放入佇列中,因為linkedblockingqueue是長度為integer.max_value的佇列,可以認為是無界佇列,因此往佇列中可以插入無限多的任務,在資源有限的時候容易引起oom異常,同時因為無界佇列,maximumpoolsize和keepalivetime引數將無效,壓根就不會建立非核心執行緒

5.3 executors#newfixedthreadpool方法

public static executorservice newfixedthreadpool(int nthreads)
fixedthreadpool是固定核心執行緒的執行緒池,固定核心執行緒數由使用者傳入

public class tasktest }}

使用executors建立的cachedthreadpool,往執行緒池中無限新增執行緒 在啟動測試類之前先將jvm記憶體調整小一點,不然很容易將電腦跑出問題,在idea裡:run -> edit configurations

建立到3w多個執行緒的時候開始報oom錯誤

另外兩個執行緒池就不做測試了,測試方法一致,只是建立的執行緒池不一樣

為什麼阿里巴巴的企業Logo是它?

1999年阿里巴巴早期創業時,由18個創始人之一的盛一飛設計的笑臉logo成為了永恆的經典。阿里巴巴的英文名是從 a 開始,由 a 結束,象徵著阿里人的追求 堅持和有始有終。而 a 本身也是網際網路標誌性的 的心臟。在盛一飛的眼中,這個由 a 構成的笑臉代表了客戶滿意的微笑,他希望這個logo 能夠...

阿里巴巴為什麼不再談「去IOE」了?

誰都知道 去ioe 的概念是阿里巴巴2008年提出的。當初指的是ibm小型機 oracle資料庫 emc的高階儲存,後來,隨著雲計算大潮的滲透,全球稜鏡門事件的發酵,中國自主創新與開放合作的深入 逐漸演化為中國的外企巨頭境遇生變,紛紛開始選擇新的路徑 可為什麼這個時候,阿里巴巴不再談 去ioe 了?...

郭盛華為什麼不去阿里巴巴?原因竟是這個

說到郭盛華想必很多都認識,畢竟曾經是網際網路安全領域的一位天才領袖。那麼郭盛華到底有多聰明?他為什麼不去阿里巴巴?他創辦東方聯盟有多強?今天小編就帶你們來了解一下!郭盛華建立了乙個有著近1億活躍使用者的東方聯盟,他還創辦了東聯科技公司,還是廣東省志願者聯合會的成員。郭盛華從小愛看墨菲定律的書籍,是乙...