目的
提高利用率
方便管理
執行緒池的四種建立方式
newcachedthreadpool
public class testtwo
});}
}}
newfixedthreadpool
public class testtwo
});}
}}
newsinglethreadexecutor
newscheduledthreadpool
執行緒池的工作原理
當乙個任務提交至執行緒池之後,執行緒池首先判斷核心執行緒池裡的執行緒是否已經滿了。如果不是,則建立乙個新的工作執行緒來執行任務。否則進入2.
判斷工作佇列是否已經滿了,倘若還沒有滿,將執行緒放入工作佇列。否則進入3.
判斷執行緒池裡的執行緒是否都在執行任務。如果不是,則建立乙個新的工作執行緒來執行。如果執行緒池滿了,則交給飽和策略來處理任務。
threadpoolexecutor
當乙個任務提交至執行緒池之後,執行緒池首先當前執行的執行緒數量是否少於corepoolsize。如果是,則建立乙個新的工作執行緒來執行任務。如果都在執行任務,則進入2.
判斷blockingqueue是否已經滿了,倘若還沒有滿,則將執行緒放入blockingqueue。否則進入3.
如果建立乙個新的工作執行緒將使當前執行的執行緒數量超過maximumpoolsize,則交給rejectedexecutionhandler來處理任務。
schedulethreadpoolexecutor
關閉方式
執行緒池容量的動態調整
threadpoolexecutor提供了動態調整執行緒池容量大小的方法:setcorepoolsize()和setmaximumpoolsize(),執行緒池有5種狀態setcorepoolsize:設定核心池大小
setmaximumpoolsize:設定執行緒池最大能建立的執行緒數目大小
當上述引數從小變大時,threadpoolexecutor進行執行緒賦值,還可能立即建立新的執行緒來執行任務。
(01) 狀態說明:執行緒池處在running狀態時,能夠接收新任務,以及對已新增的任務進行處理。(02) 狀態切換:執行緒池的初始化狀態是running。換句話說,執行緒池被一旦被建立,就處於running狀態!
道理很簡單,在ctl的初始化**中(如下),就將它初始化為running狀態,並且"任務數量"初始化為0。
(01) 狀態說明:執行緒池處在shutdown狀態時,不接收新任務,但能處理已新增的任務。(02) 狀態切換:呼叫執行緒池的shutdown()介面時,執行緒池由running -> shutdown。
(01) 狀態說明:執行緒池處在stop狀態時,不接收新任務,不處理已新增的任務,並且會中斷正在處理的任務。(02) 狀態切換:呼叫執行緒池的shutdownnow()介面時,執行緒池由(running or shutdown ) -> stop。
(02) 狀態切換:當執行緒池在shutdown狀態下,阻塞隊列為空並且執行緒池中執行的任務也為空時,就會由 shutdown -> tidying。
當執行緒池在stop狀態下,執行緒池中執行的任務為空時,就會由stop -> tidying。
(01) 狀態說明:執行緒池徹底終止,就變成terminated狀態。(02) 狀態切換:執行緒池處在tidying狀態時,執行完terminated()之後,就會由 tidying -> terminated。
配置執行緒池需要考慮哪些因素
從任務的優先順序,任務的執行時間長短,任務的性質(cpu密集/ io密集),任務的依賴關係這四個角度來分析。並且近可能地使用有界的工作佇列。性質不同的任務可用使用不同規模的執行緒池分開處理:
參考
posted @ 2019-01-24 21:50
編輯收藏
執行緒 執行緒池
執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...
執行緒 執行緒池
乙個簡單執行緒的建立和銷毀如下 與程序程序相比,執行緒是一種輕量級的工具,但是輕量並不代表沒有,它的建立和關閉依然需要花費時間,如果建立和銷毀的時間還大於執行緒本身完成的工作,那就會得不償失,甚至會造成out of memory。即使沒有,大量的執行緒 也會給gc帶來巨大的壓力。為了解決這樣的問題,...
mysql 執行緒池 c MySQL執行緒池
mysql執行緒池 在麼mysql中,執行緒池指的是用來管理處理mysql客戶端連線任務的執行緒的一種機制。如果把執行緒看做系統資源那麼執行緒池本質上是對系統資源的管理,對應作業系統來說執行緒的建立和銷毀是比較消耗系統資源的,頻繁的建立與銷毀執行緒必然給系統帶來不必要的資源浪費,特別是在高負載的情況...