常見執行緒池問題

2022-06-09 15:36:12 字數 1096 閱讀 7351

什麼是執行緒池?

執行緒池是一種多執行緒處理形式,處理過程中將任務提交到執行緒池,任務的執行交由執行緒池來管理。

如果每個請求都建立乙個執行緒去處理,那麼伺服器的資源很快就會被耗盡,使用執行緒池可以減少建立和銷毀執行緒的次數,每個工作執行緒都可以被重複利用,可執行多個任務。

為什麼要使用執行緒池?

建立執行緒和銷毀執行緒的花銷是比較大的,這些時間有可能比處理業務的時間還要長。這樣頻繁的建立執行緒和銷毀執行緒,再加上業務工作執行緒,消耗系統資源的時間,可能導致系統資源不足。(我們可以把建立和銷毀的執行緒的過程去掉)

執行緒池有什麼作用?

執行緒池作用就是限制系統中執行執行緒的數量。

1、提高效率 建立好一定數量的執行緒放在池中,等需要使用的時候就從池中拿乙個,這要比需要的時候建立乙個執行緒物件要快的多。

2、方便管理 可以編寫執行緒池管理**對池中的執行緒同一進行管理,比如說啟動時有該程式建立100個執行緒,每當有請求的時候,就分配乙個執行緒去工作,如果剛好併發有101個請求,那多出的這乙個請求可以排隊等候,避免因無休止的建立執行緒導致系統崩潰。

常見執行緒池

1、newsinglethreadexecutor

建立乙個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有任務按照指定順序(fifo, lifo, 優先順序)執行。

乙個單執行緒的執行緒池,可以用於需要保證順序執行的場景,並且只有乙個執行緒在執行

2、newfixedthreadpool

建立乙個定長線程池,可控制線程最大併發數,超出的執行緒會在佇列中等待。

乙個固定大小的執行緒池,可以用於已知併發壓力的情況下,對執行緒數做限制

3、newcachedthreadpool

建立乙個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活**空閒執行緒,若無可**,則新建執行緒。

乙個可以無限擴大的執行緒池,比較適合處理執行時間比較小的任務

4、newscheduledthreadpool

建立乙個定長線程池,支援定時及週期性任務執行。

可以延時啟動,定時啟動的執行緒池,適用於需要多個後台執行緒執行週期任務的場景

5、newworkstealingpool

乙個擁有多個任務佇列的執行緒池,可以減少連線數,建立當前可用cpu數量的執行緒來並行執行。

java執行緒池(2) 常見執行緒池

執行緒池的建立和使用 生成執行緒池採用了工具類executors的靜態方法,一下是幾種常見的執行緒池。singlethreadexecutor 單個後台執行緒 其緩衝佇列是無界的 public static executorservice newsinglethreadexecutor 簡介 建立乙...

執行緒池的拒絕策略及常見執行緒池

第一種拒絕策略是 abortpolicy,這種拒絕策略在拒絕任務時,會直接丟擲乙個型別為 rejectedexecutionexception 的 runtimeexception,讓你感知到任務被拒絕了,於是你便可以根據業務邏輯選擇重試或者放棄提交等策略。第二種拒絕策略是 discardpolic...

執行緒池建立問題

引數含義 從這四個函式來看,其實是分是否需要預設的執行緒池工廠和handler。接下來就講講這些引數代表什麼。corepoolsize 核心執行緒數量。當執行緒數少於corepoolsize的時候,直接建立新的執行緒,儘管其他執行緒是空閒的。當執行緒池中的執行緒數目達到corepoolsize後,就...