Executors工廠類建立執行緒池的底層實現

2022-08-11 14:45:14 字數 1146 閱讀 6116

public static executorservice newcachedthreadpool() 建立了乙個核心執行緒數為0,最大執行緒數無界,keepalivetime60秒,使用直接提交策略的synchronousqueue。

由於使用的是synchronousqueue,所以不斷的接受任務,由於corepoolsize設定為0,

不存在可用於立即執行任務的執行緒,所以建立新執行緒執行任務。由於設定的keepalivetime為60秒。

所以,當某執行緒服務完a任務後,60秒後被**,期間還有可能去服務其它的任務。達到執行緒重用的效果。

// 固定大小執行緒池

public static executorservice newfixedthreadpool(int nthreads)

建立了乙個核心執行緒數跟最大執行緒數相同,keepalivetime為0毫秒,使用無界佇列的linkedblockingqueue。

這樣乙個執行緒池,池內只有固定數量的核心執行緒,新來的任務全部在佇列中等待。

// 單個後台執行緒

public static executorservice newsinglethreadexecutor()

建立了乙個核心執行緒數跟最大執行緒數為1,keepalivetime為0毫秒,使用無界佇列的linkedblockingqueue。

跟上面的類似,只不過本執行緒池有且只有一條執行緒再為其服務,新來的任務全部在佇列中等待。

executors工廠類為我們提供建立執行緒池更簡便的方式,可以滿足一些基本需求,不能滿足業務需求的時候,我們還是要通過threadpoolexecutor來建立執行緒池的。

說完了executors類,順便說一下scheduledexecutorservice。

此類可安排在給定的延遲後執行或定期執行的命令。乙個例子演示完畢,每3秒鐘輸出一次hello thread. 10秒後結束任務,關閉scheduler

public static void main(string args) 

}, 1, 3, timeunit.seconds);

// 10秒後結束任務,並關閉scheduler

myscheduler.schedule(new runnable()

}, 10, timeunit.seconds);

}

用Executors工具類建立執行緒池

多執行緒技術主要解決處理器單元內多個執行緒執行的問題,它可以顯著減少處理器單元的閒置時間,增加處理器單元的吞吐能力。執行緒池主要用來解決執行緒生命週期開銷問題和資源不足問題。通過對多個任務重用執行緒,執行緒建立的開銷就被分攤到了多個任務上了,而且由於在請求到達時執行緒已經存在,所以消除了執行緒建立所...

執行緒池 Executors類建立執行緒池

executors靜態工廠建立幾種常用執行緒池 1.建立了乙個固定執行緒數量的執行緒池,可以控制線程最大併發數,超出的執行緒會在佇列中等待。newfixedthreadpool int nthreads 執行緒池中線程數量是要指定傳入的,注意在固定大小的執行緒池中使用的阻塞佇列是linkedbloc...

executors建立執行緒池

private static final executor exec executors.newfixedthreadpool 50 runnable runnable new runnable exec.execute runnable callablecallable new callable ...