使用池化技術的理由:
我們的程式伴隨著建立銷毀執行緒十分浪費資源,
所以使用執行緒池,先建立執行緒,隨用隨取,用完歸還
簡單來說就是節約了資源。
使用執行緒池的好處:節省資源(最大併發執行緒數可控);提高了響應速度;方便管理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 解鎖鎖是什麼,如何判斷鎖的是誰...