執行緒池之ThreadPoolExecutor概述

2022-10-05 06:18:11 字數 2282 閱讀 3362

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,您可以允許池容納任意數量的併發任務。

通常,核心和最大池大小僅在構建時設定,但也可以使用setcorepoolsizesetmaximumpoolsize進行動態更改。

飽和策略:rejectedexecutionhandler拒絕任務有兩種情況:1. 執行緒池已經被關閉;2. 任務佇列已滿且maximumpoolsizes已滿;

無論哪種情況,都會呼叫rejectedexecutionhandler的rejectedexecution方法。預定義了四種處理策略:

JUC之執行緒池

一 定義 提供了乙個執行緒佇列,佇列中儲存著所有等待的執行緒。作用 避免了建立與銷毀額外開銷,提高了相應的速度。二 執行緒池的體系結構 executorservice 子介面 執行緒池的主要介面 threadpoolexecutor 實線類 scheduledexecutorservice 子介面 ...

ThreadPool 之 執行緒池概覽

因為程序的切換相當耗費資源,加上 cpu 的發展,作業系統中引入了執行緒的概念。相比於程序的上下文切換,執行緒的切換更輕量級,但是不代表沒有開銷,而且大部分多執行緒的生命週期都比較短,會發生頻繁的執行緒建立 銷毀動作,這也是相當消耗資源的,因此引入了執行緒池。合理利用執行緒池能夠帶來三個好處。第一 ...

Java多執行緒學習之 執行緒池

一 executor s及其executorservice 二 executors工廠建立執行緒池 三 threadpoolexecutor建立執行緒池 executors底層是通過threadpoolexecutor實現的。建議使用threadpoolexecutor實現自定義執行緒池 publi...