執行緒池 ThreadPoolExecutor

2021-10-24 19:32:02 字數 2286 閱讀 4734

簡單示例

@test

public

void

test1()

trycatch

(interruptedexception e)

}

輸出結果:

pool-1-thread-2

pool-1-thread-3

main

pool-1-thread-1

main

pool-1-thread-3

pool-1-thread-2

pool-1-thread-4

pool-1-thread-3

pool-1-thread-1

先來看下threadpoolexecutor 的構造

public

threadpoolexecutor

(int corepoolsize,

int maximumpoolsize,

long keepalivetime,

timeunit unit,

blockingqueue

workqueue,

rejectedexecutionhandler handler)

構造引數:corepoolsize:執行緒池的初始化大小

maximumpoolsize:執行緒池的最大數

keepalivetime:非核心執行緒的空閒時間,這個時長,就會被**。

unit:執行緒池的空閒時間單位

workqueue:工作佇列

rejectedexecutionhandler :如果執行緒池已達最大執行緒數並且工作佇列已滿,執行緒池對後加入的執行緒執行的拒絕策略。

abortpolicy:終止策略,直接丟擲rejectedexecutionexception異常

discardpolicy:拋棄策略,什麼都不做

discardoldestpolicy:丟棄舊的任務,再執行當前任務

callerrunspolicy:用當前執行緒執行該任務

執行狀態

其中atomicinteger變數ctl的功能非常強大:利用低29位表示執行緒池中線程數,通過高3位表示執行緒池的執行狀態:

private

final atomicinteger ctl =

newatomicinteger

(ctlof

(running,0)

);private

static

final

int count_bits = integer.size -3;

private

static

final

int capacity =(1

<< count_bits)-1

;

1、running:-1 << count_bits,即高3位為111,該狀態的執行緒池會接收新任務,並處理阻塞佇列中的任務;

2、shutdown: 0 << count_bits,即高3位為000,該狀態的執行緒池不會接收新任務,但會處理阻塞佇列中的任務;

3、stop : 1 << count_bits,即高3位為001,該狀態的執行緒不會接收新任務,也不會處理阻塞佇列中的任務,而且會中斷正在執行的任務;

4、tidying : 2 << count_bits,即高3位為010, 所有的任務都已經終止;

5、terminated: 3 << count_bits,即高3位為011, terminated()方法已經執行完成

worker

private

final

class

worker

extends

abstractqueuedsynchronizer

implements

runnable

預設情況下,執行緒池只會在呼叫執行方法的時候,才會建立執行緒,如果想要在呼叫前就建立核心執行緒,呼叫prestartallcorethreads()

執行緒池的執行大概流程

1、如果執行緒池數小於核心執行緒池數,建立乙個worker並執行,乙個worker相當於是乙個執行緒

2、如果執行緒池數大於核心執行緒池並且工作佇列未滿情況下,將當前任務新增到工作佇列中

3、如果執行緒池大於核心執行緒數且小於最大執行緒數,而且佇列已滿情況下,重新建立乙個worker

執行緒 執行緒池

執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...

執行緒 執行緒池

乙個簡單執行緒的建立和銷毀如下 與程序程序相比,執行緒是一種輕量級的工具,但是輕量並不代表沒有,它的建立和關閉依然需要花費時間,如果建立和銷毀的時間還大於執行緒本身完成的工作,那就會得不償失,甚至會造成out of memory。即使沒有,大量的執行緒 也會給gc帶來巨大的壓力。為了解決這樣的問題,...

mysql 執行緒池 c MySQL執行緒池

mysql執行緒池 在麼mysql中,執行緒池指的是用來管理處理mysql客戶端連線任務的執行緒的一種機制。如果把執行緒看做系統資源那麼執行緒池本質上是對系統資源的管理,對應作業系統來說執行緒的建立和銷毀是比較消耗系統資源的,頻繁的建立與銷毀執行緒必然給系統帶來不必要的資源浪費,特別是在高負載的情況...