一、threadpoolexecutor的重要引數
queuecapacity:任務佇列容量(阻塞佇列)
maxpoolsize:最大執行緒數
keepalivetime:執行緒空閒時間
allowcorethreadtimeout:允許核心執行緒超時
rejectedexecutionhandler:任務拒絕處理器
執行緒池會呼叫rejectedexecutionhandler來處理這個任務。如果沒有設定預設是abortpolicy,會丟擲異常
threadpoolexecutor類有幾個內部實現類來處理這類情況:
實現rejectedexecutionhandler介面,可自定義處理器
二、threadpoolexecutor執行順序:
執行緒池按以下行為執行任務
當執行緒數小於核心執行緒數時,建立執行緒。
當執行緒數大於等於核心執行緒數,且任務佇列未滿時,將任務放入任務佇列。
當執行緒數大於等於核心執行緒數,且任務佇列已滿
若執行緒數小於最大執行緒數,建立執行緒
若執行緒數等於最大執行緒數,丟擲異常,拒絕任務
三、如何設定引數
如何來設定
做幾個計算
queuecapacity = (coresizepool/taskcost)*responsetime
maxpoolsize = (max(tasks)- queuecapacity)/(1/taskcost)
rejectedexecutionhandler:根據具體情況來決定,任務不重要可丟棄,任務重要則要利用一些緩衝機制來處理
keepalivetime和allowcorethreadtimeout採用預設通常能滿足
以上都是理想值,實際情況下要根據機器效能來決定。如果在未達到最大執行緒數的情況機器cpu load已經滿了,則需要通過公升級硬體(呵呵)和優化**,降低taskcost來處理。
ThreadPoolExecutor 引數解析
threadpoolexecutor 主要有以下幾個引數 public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit,blockingqueueworkqueue,th...
ThreadPoolExecutor引數設定
1 首先預估系統負載,需要以下幾個值 tasks 每秒的任務數,假設為50 100 tasktime 每個任務花費時間,假設為0.1s responsetime 系統允許容忍的最大響應時間,假設為30s 2 計算 1 corepoolsize 每個任務需要tasktime秒處理,則每個執行緒每秒可處...
mysql重要引數 MySQL 部分重要引數說明
特別推薦 innodb buffer pool size 檢視系統變數 variable name value innodb buffer pool chunk size 134217728 128m innodb buffer pool instances 1 innodb buffer pool...