JUC 併發程式設計 執行緒池

2021-10-10 15:08:19 字數 2137 閱讀 8202

使用池化技術的理由:

我們的程式伴隨著建立銷毀執行緒十分浪費資源,

所以使用執行緒池,先建立執行緒,隨用隨取,用完歸還

簡單來說就是節約了資源。

使用執行緒池的好處:節省資源(最大併發執行緒數可控);提高了響應速度;方便管理1.newfixedthreadpool(執行緒數):建立指定數量執行緒的執行緒池

2.newsinglethreadexecutor():建立單執行緒的執行緒池

3.newcachethreadpool():隨著請求的增多執行緒也隨之建立,遇強則強

我們之前都是用executors建立執行緒池的,但是到了後期強制不可以用

因此現在用threadpoolexecutor建立執行緒池

為什麼不能使用executors建立執行緒池呢?

1.fixedthreadpool和singlethreadpool允許的請求佇列的長度很大,約為21億,

所以可能堆積大量的請求,導致oom

2.cachedthreadpool允許建立的執行緒數量很大,可能會導致建立大量的執行緒,從而導致oom

**如下:

public

static

void

main

(string[

] args));

}}catch

(exception e)

finally

}

七大引數:

1.corepoolsize:   核心執行緒數,一直存活,即使執行緒數小於核心執行緒數的時候,

執行緒數有空閒,執行緒池也會建立新的執行緒。

2.maximumpoolsize:最大執行緒數,當執行緒數大於核心執行緒數的時候並且任務佇列已經滿了的時候,

執行緒池會建立新的執行緒,當執行緒數大於最大執行緒數的時候並且任務佇列已經滿了,

會丟擲異常。

直到執行緒數等於核心執行緒數,如果allowcorethreadtimeout=

true,

則會直到執行緒數為0。

4.timeunit unit 超時時間單位。

5.blockingqueue

workqueue:

阻塞佇列,任務佇列的容量。

6.threadfactory threadfactory:

執行緒工廠,基本不用設定。

7.rejectedexecutionhandler handler:

拒絕策略,任務拒絕處理器。

public

threadpoolexecutor

(int corepoolsize,

//核心執行緒數

int maximumpoolsize,

//最大執行緒數

long keepalivetime,

//超時無人呼叫就會釋放

timeunit unit,

//超時時間單位

blockingqueue

workqueue,

//阻塞佇列

threadfactory threadfactory,

//執行緒工廠-不用動

rejectedexecutionhandler handler)

//拒絕策略

四種拒絕策略:

1.newthreadpoolexecutor.

.abortpolicy()

:執行緒池滿了,還有執行緒想加入,不處理這個請求,跑出異常

2.newthreadpoolexecutor.callerrunspolicy

():如果任務被拒絕,則通過呼叫它執行緒執行此任務,哪來的回哪去

3.newthreadpoolexecutor.discardpolicy

():佇列滿了,丟掉任務,不會丟擲異常

4.newthreadpoolexecutor.discardoldestpolicy

():佇列滿了,嘗試去和最早的競爭,不會丟擲異常

io密集型,cpu密集型:(調優)

public

static

void

main

(string[

] args));

}}catch

(exception e)

finally

}

J U C執行緒池

執行緒的建立和切換都是代價比較大的。所以,我們需要有乙個好的方案能做到執行緒的復用,這就涉及到乙個概念 執行緒池。合理的使用執行緒池能夠帶來3個很明顯的好處 降低資源消耗 通過重用已經建立的執行緒來降低執行緒建立和銷毀的消耗 提高響應速度 任務到達時不需要等待執行緒建立就可以立即執行。提高執行緒的可...

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併發程式設計

併發程式設計的本質 充分利用cpu的資源 執行緒就是乙個單獨的資源類,沒有任何的附屬操作。傳統的synchronize鎖本質 佇列,鎖 lock.lock 加鎖 trynew reentrantlock lock.lock 加鎖 finally lock.unlock 解鎖鎖是什麼,如何判斷鎖的是誰...