ThreadPoolExecutor執行緒池執行器

2021-09-29 03:43:58 字數 1246 閱讀 2228

先看一下threadpoolexecutor構造器方法(引數最多的那個)

public threadpoolexecutor(int corepoolsize,

int maximumpoolsize,

long keepalivetime,

timeunit unit,

blockingqueueworkqueue,

threadfactory threadfactory,

rejectedexecutionhandler handler)

引數解析:corepoolsize :執行緒池中的核心執行緒數

maximumpoolsize:執行緒池允許的最大執行緒數,blockingqueue滿了,當執行緒池中的執行緒數< maximumpoolsize時,當有新的任務到來時,會繼續建立新的執行緒去處理

unit : 存活時間單位值(秒,毫秒等)

workqueue : 儲存任務的阻塞佇列

threadfactory:建立執行緒的工廠,給新建的執行緒賦予名字

handler : 任務飽和拒絕策略

abortpolicy: 預設直接丟擲異常;

callerrunspolicy: 用呼叫者所在的執行緒來執行任務;

discardoldestpolicy: 丟棄阻塞佇列裡面最老的任務,佇列裡面最靠前的任務;

dicardpolicy: 當前任務直接丟棄

當然我們也可以實現rejectedexecutionhandler介面來實現自己的飽和拒絕策略

當執行緒池中的執行緒(已開啟的執行緒)個數 < corepoolsize時,每次進來新的任務,就啟動乙個執行緒去處理這個任務;

當執行緒池中的執行緒個數 > corepoolsize時,這時每次進來的任務會加入到blockingqueue佇列中;

當執行緒池中的執行緒個數 >= corepoolsize且< maximumpoolsize, 並且blockingqueue佇列也滿了,這個時候再來新的任務時,就會繼續建立新的執行緒去處理。這個時候建立的執行緒,當這些執行緒空閒下來的時候到keepalivetime結束就會銷毀;

當執行緒池中的執行緒數 >= maximumpoolsize時,這個時候再來新的任務,就會執行拒絕策略。

如何正確的建立執行緒池

ThreadPoolExecutor執行原理

基本概念 一種執行緒使用模式。執行緒過多會帶來排程開銷,進而影響快取區域性性和整體效能。不要使用executor建立執行緒池,而是通過threadpoolexecutor的方式建立,這樣的處理方式能讓編寫 的人更加明確執行緒池的執行規則,規避資源耗盡的風險。說明 executors 返回的執行緒池物...

ThreadPoolExecutor執行緒池原始碼解讀

主要變數 private volatile int corepoolsize private volatile int maximumpoolsize private volatile int poolsize 建構函式 也就是建立類的時候,需要注入引數。public threadpoolexecu...

ThreadPoolExecutor執行緒池引數設定

jdk1.5中引入了強大的concurrent包,其中最常用的莫過了執行緒池的實現threadpoolexecutor,它給我們帶來了極大的方便,但同時,對於該執行緒池不恰當的設定也可能使其效率並不能達到預期的效果,甚至僅相當於或低於單執行緒的效率。threadpoolexecutor類可設定的引數...