2. 執行緒池引數設定
threadpoolexecutor是建立執行緒池的核心類,它定義了一些建構函式用來建立執行緒池,如下是它的其中乙個建構函式:
public
threadpoolexecutor
(int corepoolsize,
int maximumpoolsize,
long keepalivetime,
timeunit unit,
blockingqueue
workqueue,
threadfactory threadfactory)
}
下面分別說一下它的這些引數:
long keepalivetime, timeunit unit:超過corepoolsize的執行緒的存活時長,超過這個時間,多餘的執行緒會被**。
blockingqueue< runnable> workqueue: 任務的阻塞佇列
threadfactory threadfactory, // 新執行緒的產生方式
rejectedexecutionhandler handler: 任務佇列滿時,新任務到達後採用的拒絕策略。
keepalivetime、timeunit
組合搭配用來限制空閒執行緒(除核心執行緒外的其他執行緒)的存活時間。
timeunit.days;
//天timeunit.hours;
//小時
timeunit.minutes;
//分鐘
timeunit.seconds;
//秒timeunit.milliseconds;
//毫秒
timeunit.microseconds;
//微妙
timeunit.nanoseconds;
//納秒
blockingqueueworkqueue
: 任務的排隊阻塞佇列,當核心執行緒數已滿時新提交的任務會被儲存到阻塞佇列中。blockingqueue的實現類主要有以下幾種:
rejectedexecutionhandler
,拒絕策略:任務佇列滿時,並且當前正在執行任務的執行緒數等於最大執行緒數時,新任務到達後採用的拒絕策略。
計算密集型(cpu密集型)的任務比較消耗cpu,所以一般執行緒數設定的大小等於或者略微大於 cpu的核數;一般為n+1(n為cpu的核數)
磁碟密集型(io密集型)的任務主要時間消耗在 io等待上,cpu壓力並不大,所以執行緒數一般設定較大。例如 多執行緒訪問資料庫,資料庫有128個表,可能就直接考慮使用128個執行緒。io密集型一般為2*n(n為cpu的核數)
設定引數時需要注意的點有以下幾個:
執行緒池引數設定技巧
一 threadpoolexecutor的重要引數 queuecapacity 任務佇列容量 阻塞佇列 maxpoolsize 最大執行緒數 keepalivetime 執行緒空閒時間 allowcorethreadtimeout 允許核心執行緒超時 rejectedexecutionhandler...
java中線程池引數設定
本文主要介紹執行緒池是解決了哪些問題以及執行緒池中 的corepoolsize 核心執行緒數 queuecapacity 等待佇列的長度 maximumpoolsize 最大核心執行緒數 本文不會對執行緒池各個引數介紹,假定你已經了解了執行緒池各個引數的含義。當前實際應用中,經常會遇到單個請求處理時...
執行緒池及核心引數
一般來說,執行緒的生命週期需要通過 new 新建 start 就緒 running 執行中 dead 消亡 假設每個狀態到下乙個狀態需要的時間是 1,2,3 秒 但是我們往往只是關心running 那個狀態就可以了,這是執行緒需要執行的任務 使用執行緒池,建立一定數量的執行緒,專門執行任務的run ...