Java - 執行緒池引數
ThreadPoolExecutor
ThreadPoolExecutor是執行緒池的真正實現,他通過構造方法的一系列引數(不同的構造方法),來構成不同配置的執行緒池。
構造方法引數
-
corePoolSize
核心執行緒數,預設情況下核心執行緒會一直存活,即使處於閒置狀態也不會受存
keepAliveTime
限制。除非將allowCoreThreadTimeOut
設定為true
。有任務來之後,就會建立一個執行緒去執行任務,當執行緒池中的執行緒數目達到corePoolSize後,就會把到達的任務放到快取隊列當中,任務佇列也滿了,就看maximumPoolSize了 -
maximumPoolSize
執行緒池所能容納的最大執行緒數。超過這個數的執行緒將被阻塞。當任務佇列為沒有設定大小的LinkedBlockingDeque時,這個值無效。
-
keepAliveTime
執行緒空閒時間達到keepAliveTime時,執行緒會退出,直到執行緒數量=corePoolSize;如果引數allowCoreThreadTimeout=true,則會直到執行緒數量=0;
-
unit
keepAliveTime
的單位。 -
workQueue
執行緒池中的任務佇列.
常用的有
SynchronousQueue
,LinkedBlockingDeque
ArrayBlockingQueue
。 -
threadFactory
執行緒工廠,建立執行緒的
-
RejectedExecutionHandler
拒絕策略,是一個介面,可以自己實現自定義的拒絕策略。
- 兩種情況會拒絕處理任務:
當執行緒數已經達到maxPoolSize,切佇列已滿,會拒絕新任務
當執行緒池被呼叫shutdown()後,會等待執行緒池裡的任務執行完畢,再shutdown。如果在呼叫shutdown()和執行緒池真正shutdown之間提交任務,會拒絕新任務。
- 具體策略(可自定義):
- AbortPolicy 丟棄任務,拋執行時異常(預設)
- CallerRunsPolicy 執行任務
- DiscardPolicy 忽視,什麼都不會發生
- DiscardOldestPolicy 從佇列中踢出最先進入佇列(佇列最前面)的任務