多執行緒 JUC學習 執行緒池 執行緒池基本原理

2021-10-07 15:27:35 字數 1525 閱讀 9578

如果併發的執行緒數量很多,並且每個執行緒都是執行乙個時間很短的任務就結束了,這樣頻繁建立執行緒就會大大降低系統的效率,因為頻繁建立執行緒和銷毀執行緒需要時間。 

執行緒池使得執行緒可以復用,就是執行完乙個任務,並不被銷毀,而是可以繼續執行其他的任務。

降低資源消耗。重複利用已建立執行緒,降低執行緒建立與銷毀的資源消耗。 

提高響應效率。任務到達時,不需等待建立執行緒就能立即執行。 

提高執行緒可管理性。 

防止伺服器過載。記憶體溢位、cpu耗盡 

生產者-消費者模型

(可以把這個引數當成是球隊後背球員,當主力不足時才會讓後備隊員上場救急)執行緒池的最大執行緒數,代表著執行緒池中能建立多少執行緒池。超出corepoolsize,小於maximumpoolsize的執行緒會在執行任務結束後被釋放。此配置在catchedthreadpool中有效。 

3、long keepalivetime 

剛剛說到的會被釋放的執行緒快取的時間。我們可以看到,正如我們所說的,在cachedthreadpool()構造過程中,會被設定快取時間為60s(時間單位由第四個引數控制)。

4、timeunit unit 

設定第三個引數keepalivetime的時間單位。

5、阻塞佇列 

儲存等待執行任務的阻塞佇列,有多種選擇,常用的介紹:

6、rejectedexecutionhandler handler 

這個引數是當任務到佇列中之後快取中佇列阻塞的也已經滿了的時候,會去啟動備用後備隊員去進行補充球隊,但是如果此時後備隊員也不夠的話(),這個引數就會起到他的作用,會啟用無法執行任務的策略

threadpoolexecutor.abortpolicy:丟棄任務並丟擲rejectedexecutionexception異常。 

threadpoolexecutor.discardpolicy:也是丟棄任務,但是不丟擲異常。

threadpoolexecutor.discardoldestpolicy:丟棄佇列最前面的任務,然後重新嘗試執行任務(重複此過程)

threadpoolexecutor.callerrunspolicy:由呼叫執行緒處理該任務

7、threadfactory 

這個引數就是乙個執行緒工廠,主要的功能就是用來建立執行緒的

遍歷執行緒池中的所有執行緒,然後逐個呼叫執行緒的interrupt方法來中斷執行緒.

j u c執行緒 執行緒池

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

J U C執行緒池

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

JUC 執行緒池數量

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