執行緒池及核心引數

2021-09-25 20:23:18 字數 1575 閱讀 1510

一般來說,執行緒的生命週期需要通過 new(新建)->start(就緒)->running(執行中)->dead(消亡)

假設每個狀態到下乙個狀態需要的時間是

1,2,3 秒

但是我們往往只是關心running 那個狀態就可以了,這是執行緒需要執行的任務

使用執行緒池,建立一定數量的執行緒,專門執行任務的run 方法,實現了執行緒的復用,同時也減少了其他狀態的佔比,提高了整個系統的執行效率

核心執行緒,最大執行緒,定義不好解釋,還是看這兩個引數在執行任務的過程中對worker 執行緒的建立的影響吧。

這兩個引數的目的是:

盡量少的建立執行緒(核心執行緒是初始化執行緒池時建立的,當有任務來時,核心執行緒都忙,則往佇列放,而不是立刻建立執行緒)

盡量快的執行任務(優先使用核心執行緒執行任務,不夠,再入隊,隊滿,使用新執行緒執行)

控制最大執行緒數(資源的限制)

記憶:任務到來,優先使用核心執行緒,核心執行緒數不夠,再排隊,佇列排滿再開啟新執行緒執行任務,核心執行緒+非核心執行緒數達到最大執行緒數,則將任務交給拒絕策略處理。

fixedexcutor:固定執行緒池大小

singlethreadpool:單執行緒,

cachedthreadpool:可快取

executors.

newcachedthreadpool()

; executors.

newsinglethreadexecutor()

;//單執行緒執行緒池

executors.

newfixedthreadpool(2

);//固定執行緒池大小

使用阻塞佇列去放置未被執行的任務

worker 執行緒則是在執行完當前任務後,從佇列中取出任務執行

核心構造方法:

threadpoolexecutor

(int corepoolsize,

// 核心執行緒數

int maximumpoolsize,

// 最大執行緒數

long keepalivetime,

// 執行緒閒閒置存活時間,如果閒置時間超過改時間,則**該執行緒(長時間沒任務)

timeunit unit,

// 時間單位

blockingqueue

workqueue)

//任務佇列

add/offer 入隊,前者佇列滿時,會丟擲異常,後者會返回false,offer 還可以設定時間引數,限時入隊

peek/pool 返回隊頭元素,前者返回,但是不移除,後者返回且移除

讀寫鎖的使用 (reentrantlock)takelock,putlock

響應快:系統啟動就建立一部分執行緒

降低資源消耗:重複利用機制,減少執行緒重複建立銷毀造成的損耗

提高執行緒可管理性:統一分配,調優和監控

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

2.執行緒池引數設定 threadpoolexecutor是建立執行緒池的核心類,它定義了一些建構函式用來建立執行緒池,如下是它的其中乙個建構函式 public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepaliv...

執行緒核心引數? 如何合理配置執行緒池引數?

預設配置 corepoolsize 1 queuecapacity integer.max value maxpoolsize integer.max value keepalivetime 60秒 allowcorethreadtimeout false rejectedexecutionhand...

執行緒池引數及佇列

引數名 含義corepoolsize 核心執行緒數 maximumpoolsize 最大執行緒數 keepalivetime 時間單位 空閒執行緒的存活時間 workqueue 用於存放任務的佇列 threadfactory 執行緒工廠 用來建立新執行緒 handler 處理別拒絕的任務 corep...