J U C執行緒池

2022-07-12 06:33:09 字數 1781 閱讀 8815

執行緒的建立和切換都是代價比較大的。所以,我們需要有乙個好的方案能做到執行緒的復用,這就涉及到乙個概念——執行緒池。合理的使用執行緒池能夠帶來3個很明顯的好處:

降低資源消耗:通過重用已經建立的執行緒來降低執行緒建立和銷毀的消耗

提高響應速度:任務到達時不需要等待執行緒建立就可以立即執行。

提高執行緒的可管理性:執行緒池可以統一管理、分配、調優和監控。

執行緒池同樣有五種狀態:running, shutdown, stop, tidying, terminated。

private

final atomicinteger ctl = new atomicinteger(ctlof(running, 0));

private

static

final

int count_bits = integer.size - 3;

private

static

final

int capacity = (1 << count_bits) - 1;

//runstate is stored in the high-order bits

private

static

final

int running = -1 << count_bits;//

對應的高3位值是111

private

static

final

int shutdown = 0 << count_bits;//

對應的高3位值是000

private

static

final

int stop = 1 << count_bits;//

對應的高3位值是001

private

static

final

int tidying = 2 << count_bits;//

對應的高3位值是010

private

static

final

int terminated = 3 << count_bits;//

對應的高3位值是011

//packing and unpacking ctl

private

static

int runstateof(int c)

private

static

int workercountof(int c)

private

static

int ctlof(int rs, int wc)

變數ctl定義為atomicinteger ,記錄了「執行緒池中的任務數量」和「執行緒池的狀態」兩個資訊。共32位,其中高3位表示」執行緒池狀態」,低29位表示」執行緒池中的任務數量」。

執行緒池引數最全的構造方法

public threadpoolexecutor(int

corepoolsize,

intmaximumpoolsize,

long

keepalivetime,

timeunit unit,

blockingqueue

workqueue,

threadfactory threadfactory,

rejectedexecutionhandler handler)

共有七個引數,每個引數含義如下:

j u c執行緒 執行緒池

final void runworker worker w catch runtimeexception x catch error x catch throwable x finally finally completedabruptly false finally private runnabl...

JUC 執行緒池數量

去乙個網頁抓資料儲存到資料庫中,這個過程也就1秒中吧 執行緒池fixedthreadpool配製多少合適?如果是cpu密集型應用,則執行緒池大小設定為n 1 n為cpu的核數 如果是io密集型應用,則執行緒池大小設定為2n 1 這裡去乙個網頁抓資料 需要建立http請求響 io 應後拿到資料,然後再...

執行緒池 juc包下

1.使用執行緒池的優點如下 1.降低資源消耗 通過重複利用已建立的執行緒,降低執行緒建立與銷毀帶來的損耗。2.提高響應速度 當新任務到達時,任務不需要等待執行緒建立就可以立即執行。3.提高執行緒的可管理性 使用執行緒池可以統一進行執行緒分配 排程與監控。當乙個runnable或callable物件到...