線程池隊列大小設置?
一、ThreadPoolExecutor的重要參數
CorePoolSize:核心線程的數量。核心線程會一直存活,沒有任務要及時執(zhí)行。當線程數小于核心線程數時,即使有空閑線程,線程池也會優(yōu)先創(chuàng)建新線程進行處理。當allowCoreThreadTimeouttrue(默認為false)被設置時,核心線程將隨著時間的推移而關閉。
QueueCapacity:任務隊列容量(阻塞隊列)
當核心線程的數量達到最大值時,新任務將排隊等待執(zhí)行。
MaxPoolSize:最大線程數
當線程數為gtcorePoolSize且任務隊列已滿時。線程池創(chuàng)建新的線程來處理任務。
當線程數為maxPoolSize且任務隊列已滿時,線程池將拒絕處理任務并拋出異常。
KeepAliveTime:線程空閑時間
當線程的空閑時間達到keepAliveTime時,線程將退出,直到線程數達到corePoolSize。
如果allowCoreThreadTimeouttrue,它將一直等到線程數為0。
AllowCoreThreadTimeout:允許核心線程超時。
RejectedExecutionHandler:任務拒絕處理程序
拒絕處理任務有兩種情況:
當線程數量達到maxPoolSize且隊列已滿時,新任務將被拒絕。
當線程池被調用shutdown()時,它將等待線程池中的任務被執(zhí)行,然后關閉。如果在調用shutdown()和線程池實際關閉之間提交了一個任務,新任務將被拒絕。
線程池將調用rejectedExecutionHandler來處理這個任務。如果默認值為AbortPolicy,將引發(fā)異常。
ThreadPoolExecutor類有幾個內部實現類來處理這種情況:
AbortPolicy丟棄任務并引發(fā)運行時異常。
CallerRunsPolicy執(zhí)行任務
DiscardPolicy忽略它,什么也不會發(fā)生。
DiscardOldestPolicy將首先進入隊列(最后執(zhí)行)的任務從隊列中踢出。
實現RejectedExecutionHandler接口,可以自定義處理器。
二、ThreadPoolExecutor的執(zhí)行順序
線程池執(zhí)行如下任務
(1)當線程數小于核心線程數時,創(chuàng)建線程。
(2)當線程數大于等于核心線程數且任務隊列未滿時,將任務放入任務隊列。
(3)當線程的數量大于或等于核心線程的數量,并且任何服務隊列已滿
1)如果線程數小于最大線程數,則創(chuàng)建線程。
2)如果線程數等于最大線程數,拋出異常,拒絕任務。
第三,如何設置參數
系統(tǒng)默認值
核心池大小1
_值
_值
keepAliveTime60s
allowCoreThreadTimeoutfalse
rejectedExecutionHandlerAbortPolicy()
如何設置它
需要根據幾個值來決定。
任務:每秒的任務數,假設為500~1000。
Taskcost:每個任務都需要時間,假設0.1s
Responsetime:系統(tǒng)允許的最大響應時間,假設為1s。
做一些計算
corePoolSize每秒需要處理多少線程?
線程計數任務/(1/taskcost)任務*taskcout(500~1000)*0.150~100線程。CorePoolSize設置應大于50。
根據8020原理,如果每秒80%的任務小于800,那么corePoolSize可以設置為80。
queueCapacity(核心大小池/任務成本)*響應時間
計算可用隊列容量80/0.1*180。意味著隊列中的線程可以等待1s,超過1s就需要新的線程來執(zhí)行。
記住它可以t設置為_VALUE,這樣隊列會非常大,線程數量只會保持在corePoolSize大小。當任務急劇增加時,沒有新的線程可以打開執(zhí)行,響應時間會急劇增加。
maxPoolSize(最大任務數)-隊列容量)/(1/任務成本)
可以得到計算的maxPoolSize(1000-80)/1092。
(最大任務數-隊列容量)/每個線程每秒處理能力的最大線程數
RejectedExecutionHandler:根據具體情況,任務不重要可以丟棄,而重要的任務要通過一些緩沖機制來處理。
默認情況下,通常滿足KeepAliveTime和allowCoreThreadTimeout。
以上都是理想值,要根據機器的性能來決定。如果在未達到最大線程數的情況下,機器的cpu負載已滿,則需要通過升級硬件、優(yōu)化代碼、降低taskcost來處理。
什么是激勵電壓?
激勵電壓,物理概念。為了觀察電路系統(tǒng)的特性,輸入到電路中的各種電信號是激勵信號。激勵信號的電壓就是激勵電壓。
中文名
激勵電壓
外國名字
激勵電壓
另一個名字
激勵電壓
主題類別
物理學
快的
航行
例子
基本定義
受控電源的參數由激勵源控制。
例子
例如,受控電壓源U與U的關系為:U^2,即U高一倍,激勵源為電壓。例如,UI1/2表示U的電壓值是支路I1電流值的一半,激勵源是電流I1。例如,I3表示受控電流源I的電流值是激勵源電壓值的三倍。例如,I3I1意味著受控電流源I的電流是激勵源I1的三倍。