threadpoolexecutor
7個引數:
corepoolsize
: 核心執行緒數執行緒數定義了最小可以同時執行的執行緒數量。
maximumpoolsize
: 當佇列中存放的任務達到佇列容量的時候,當前可以同時執行的執行緒數量變為最大執行緒數。
workqueue
: 當新任務來的時候會先判斷當前執行的執行緒數量是否達到核心執行緒數,如果達到的話,新任務就會被存放在佇列中。
keepalivetime
:當執行緒池中的執行緒數量大於corepoolsize
的時候,如果這時沒有新的任務提交,核心執行緒外的執行緒不會立即銷毀,而是會等待,直到等待的時間超過了keepalivetime
才會被銷毀。
unit
:keepalivetime
引數的時間單位。
threadfactory
:executor 建立新執行緒的時候會用到的執行緒工廠。
handler
:飽和策略。
阻塞佇列:
arrayblockingqueue :由陣列結構組成的有界阻塞佇列。
linkedblockingqueue :由鍊錶結構組成的有界阻塞佇列。
priorityblockingqueue :支援優先順序排序的無界阻塞佇列。
delayqueue: 使用優先順序佇列實現的無界阻塞佇列。
synchronousqueue: 不儲存元素的阻塞佇列。
linkedtransferqueue: 由鍊錶結構組成的無界阻塞佇列。
linkedblockingdeque: 由鍊錶結構組成的雙向阻塞佇列。
threadpoolexecutor
飽和策略
如果當前同時執行的執行緒數量達到最大執行緒數量並且佇列也已經被放滿了時,threadpoolexecutor
執行定義的策略:
threadpoolexecutor.abortpolicy
:丟擲rejectedexecutionexception
來拒絕新任務的處理,預設策略。
threadpoolexecutor.callerrunspolicy
:呼叫執行自己的執行緒執行任務,也就是直接在呼叫execute
方法的執行緒中執行被拒絕的任務,如果執行程式已關閉,則會丟棄該任務。當業務要求任何乙個任務都要被執行的話,可以選擇這個策略。
threadpoolexecutor.discardpolicy
: 不處理新任務,直接丟棄掉。
threadpoolexecutor.discardoldestpolicy
: 丟棄佇列最前面的任務,也就是最早進入執行緒池的未處理的任務。
private
static
final
int core_pool_size = 5;
private
static
final
int max_pool_size = 10;
private
static
final
int queue_capacity = 100;
private
static
final long keep_alive_time = 0l;
private static threadfactory namedthreadfactory = new threadfactorybuilder().setnameformat("test-pool-%d").build();
public
static
void
main(string args)
ThreadPoolExecutor 構造引數說明
核心執行緒數,當乙個新的任務提交時,如果執行緒池中的數量未達到核心執行緒數,會新起乙個執行緒執行該任務,即使執行緒池中有空閒的執行緒。執行緒池中允許的最大執行緒數,包含包含核心執行緒和非核心執行緒。當執行緒數超過核心執行緒數時,該引數規定了超過核心執行緒數的執行緒最大空閒時間。描述keepalive...
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秒處理,則每個執行緒每秒可處...