執行緒池核心引數及引數設定

2021-10-01 05:43:25 字數 1456 閱讀 4625

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 ...