threadpoolexecutor提供了四個構造方法:
我們以最後乙個構造方法(引數最多的那個),對其引數進行解釋:
public threadpoolexecutor(int corepoolsize, // 1序號名稱int maximumpoolsize, // 2
long keepalivetime, // 3
timeunit unit, // 4
blockingqueueworkqueue, // 5
threadfactory threadfactory, // 6
rejectedexecutionhandler handler )
型別含義
1corepoolsize
int核心執行緒池大小
2maximumpoolsize
int最大執行緒池大小
3keepalivetime
long
執行緒最大空閒時間
4unit
timeunit
時間單位
5workqueue
blockingqueue
執行緒等待佇列
6threadfactory
threadfactory
執行緒建立工廠
7handler
rejectedexecutionhandler
拒絕策略
自定義執行緒池:
public class threadpooltest輸出結果如下:system.in.read(); //阻塞主線程
}// 任務物件
static class mytask implements runnable
@override
public void run() catch (interruptedexception e)
}public string getname()
@override
public string tostring()
}// 自定義拒絕策略
static class myignorepolicy implements rejectedexecutionhandler
private void dolog(runnable r, threadpoolexecutor e)
}// 執行緒工廠類
static class nametreadfactory implements threadfactory }}
該執行緒池同一時間最多處理4個任務,2個任務處於等待對列中,其餘的任務都會被拒絕執行。
tips:
在預設情況下,只有當新任務到達時,才開始建立和啟動核心執行緒,但是我們可以使用prestartcorethread()
和prestartallcorethreads()
方法動態調整。
prestartcorethread() :創乙個空閒任務執行緒等待任務的到達
prestartallcorethreads() :建立核心執行緒池數量的空閒任務執行緒等待任務的到達
執行緒池的處理流程主要分為3步:
通過設定corepoolsize和maximumpoolsize相同,您可以建立乙個固定大小的執行緒池。
通過將maximumpoolsize設定為基本上無界的值,例如integer.max_value,您可以允許池容納任意數量的併發任務。
通常,核心和最大池大小僅在構建時設定,但也可以使用setcorepoolsize
和setmaximumpoolsize
進行動態更改。
飽和策略:rejectedexecutionhandler拒絕任務有兩種情況:1. 執行緒池已經被關閉;2. 任務佇列已滿且maximumpoolsizes已滿;
無論哪種情況,都會呼叫rejectedexecutionhandler的rejectedexecution方法。預定義了四種處理策略:
JUC之執行緒池
一 定義 提供了乙個執行緒佇列,佇列中儲存著所有等待的執行緒。作用 避免了建立與銷毀額外開銷,提高了相應的速度。二 執行緒池的體系結構 executorservice 子介面 執行緒池的主要介面 threadpoolexecutor 實線類 scheduledexecutorservice 子介面 ...
ThreadPool 之 執行緒池概覽
因為程序的切換相當耗費資源,加上 cpu 的發展,作業系統中引入了執行緒的概念。相比於程序的上下文切換,執行緒的切換更輕量級,但是不代表沒有開銷,而且大部分多執行緒的生命週期都比較短,會發生頻繁的執行緒建立 銷毀動作,這也是相當消耗資源的,因此引入了執行緒池。合理利用執行緒池能夠帶來三個好處。第一 ...
Java多執行緒學習之 執行緒池
一 executor s及其executorservice 二 executors工廠建立執行緒池 三 threadpoolexecutor建立執行緒池 executors底層是通過threadpoolexecutor實現的。建議使用threadpoolexecutor實現自定義執行緒池 publi...