執行緒池的基本使用、特點、注意點
執行緒池-治理執行緒的最大法寶
1、執行緒池的自我介紹
如果不使用執行緒池,每個任務都新開一個執行緒處理
- 任務數量1000個
這樣開銷太大,我們希望有固定數量的執行緒,來執行這1000個執行緒,這樣就避免了反復創建并銷毀執行緒所帶來的開銷問題
為什么要使用執行緒池
問題一:反復創建執行緒開銷大
問題二:過多的執行緒會占用太多記憶體
解決以上兩個問題的思路:
- 用少量的執行緒-避免記憶體占用過多
- 讓這部分執行緒保持作業,且可以反復執行任務-避免生命周期的損耗
執行緒池的好處:
- 加快回應速度
- 合理利用CPU和記憶體
- 統一管理
執行緒池適合應用的場合:
- 服務器接收到大量的請求是,使用執行緒池技術是非常合適的,它可以大大減少執行緒的創建和銷毀次數,提高服務器的作業效率
- 實際上,在作業中,如果需要創建5個以上的執行緒,那么就可以使用執行緒池來管理
2、創建和停止執行緒池
執行緒池構造方法的引數

corePoolSize:核心執行緒數
-執行緒池完成初始化后,默認情況下,執行緒池中并沒有任何執行緒,執行緒池會等待有任務到來時,再創建新執行緒去執行任務
執行緒添加規則:
- 如果執行緒數小于corePoolSize,創建一個新執行緒來運行新任務
- 如果執行緒數等于(或大于)corePoolSize但小于maxiPoolSize,則將任務放入佇列
- 如果佇列已滿,并且執行緒數小于maxPoolSize,則創建一個新執行緒
- 如果佇列已滿,并且執行緒數等于(或大于)maxPoolSize,則拒絕
corePoolSize workQueue maxPoolSize
增減執行緒池的特點:
- 通過設定corePoolSize和maxPoolSize相同,就可以創建固定大小的執行緒池
- 執行緒池希望保持較少的執行緒數,并且只有再負載變得很大時才增加它
- 通過設定maxPoolSize為很高的值,可以允許執行緒池容納任意數量的并發任務
- 只有在佇列填滿時才創建多于corePoolSize的執行緒,如果使用的是誤解佇列,那么執行緒數就不會超過corePoolSize
keepAliveTime
如果執行緒池當前的執行緒數多于corePoolSize,那么如果多余的執行緒空閑時間超過keepAliveTime,那么他們就會停止
ThreadFactory用來創建執行緒
- 默認使用Executors.defaultThreadFactory()
- 創建出來的執行緒都在同一個執行緒組
- 如果自己指定ThreadFactory,那么就可以改變執行緒名、執行緒組、優先級、是否是守護執行緒
作業佇列
三種常見的佇列型別:
直接交接:SynchronousQueue
無界佇列:LinkedBlock
執行緒池應該手動創建還是自動創建
執行緒池里的執行緒數量設定為多少比較合適?
停止執行緒池的正確方法
3、常見執行緒池的特點和用法
4、任務太多,怎么拒絕
5、鉤子太多,給執行緒池加點料
6、實作原理、原始碼分析
7、使用執行緒池的注意點
ThreadLocal的基本使用、原理和注意事項
分布式基礎、核心概念
docker的下載、安裝和基本命令
獨立制作docker容器
Nginx的安裝、基本使用和常用命令
使用Nginx搭建檔案服務
訊息佇列RabbitMQ的核心概念queue、message和exchange
RabbitMQ的四種交換機模式
Spring Boot整合RabbitMQ案例
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/286447.html
標籤:區塊鏈
上一篇:PE檔案與脫殼初探
下一篇:Linux及shell編程
