首页
/
每日頭條
/
職場
/
線程池的參數配置要注意什麼
線程池的參數配置要注意什麼
更新时间:2025-12-17 09:46:17

  所謂的線程池的 7 大參數是指,在使用 ThreadPoolExecutor 創建線程池時所設置的 7 個參數,如以下源碼所示:

  public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueueRunnable workQueue, ThreadFactory ThreadFactory, RejectedExecutionHandler handler) { //... }

  這 7 個參數分别是:

  corePoolSize:核心線程數。maximumPoolSize:最大線程數。keepAliveTime:空閑線程存活時間。TimeUnit:時間單位。BlockingQueue:線程池任務隊列。ThreadFactory:創建線程的工廠。RejectedExecutionHandler:拒絕策略。參數1:corePoolSize 核心線程數:是指線程池中長期存活的線程數。

  這就好比古代大戶人家,會長期雇傭一些“長工”來給他們幹活,這些人一般比較穩定,無論這一年的活多活少,這些人都不會被辭退,都是長期生活在大戶人家的。

  參數2:maximumPoolSize 最大線程數:線程池允許創建的最大線程數量,當線程池的任務隊列滿了之後,可以創建的最大線程數。

  這是古代大戶人家最多可以雇傭的人數,比如某個節日或大戶人家有人過壽時,因為活太多,僅靠“長工”是完不成任務,這時就會再招聘一些“短工”一起來幹活,這個最大線程數就是“長工” “短工”的總人數,也就是招聘的人數不能超過 maximumPoolSize。

  注意事項 最大線程數 maximumPoolSize 的值不能小于核心線程數 corePoolSize,否則在程序運行時會報 IllegalArgumentException 非法參數異常,如下圖所示:

  線程池的參數配置要注意什麼(說一下線程池7個參數的含義)(1)

  參數3:keepAliveTime 空閑線程存活時間,當線程池中沒有任務時,會銷毀一些線程,銷毀的線程數=maximumPoolSize(最大線程數)-corePoolSize(核心線程數)。

  還是以大戶人家為例,當大戶人家比較忙的時候就會雇傭一些“短工”來幹活,但等幹完活之後,不忙了,就會将這些“短工”辭退掉,而 keepAliveTime 就是用來描述沒活之後,短工可以在大戶人家待的(最長)時間。

  參數4:TimeUnit 時間單位:空閑線程存活時間的描述單位,此參數是配合參數 3 使用的。

  參數 3 是一個 long 類型的值,比如參數 3 傳遞的是 1,那麼這個 1 表示的是 1 天?還是 1 小時?還是 1 秒鐘?是由參數 4 說了算的。

  TimeUnit 有以下 7 個值:

  TimeUnit.DAYS:天TimeUnit.HOURS:小時TimeUnit.MINUTES:分TimeUnit.SECONDS:秒TimeUnit.MILLISECONDS:毫秒TimeUnit.MICROSECONDS:微妙TimeUnit.NANOSECONDS:納秒參數5:BlockingQueue 阻塞隊列:線程池存放任務的隊列,用來存儲線程池的所有待執行任務。

  它可以設置以下幾個值:

  ArrayBlockingQueue:一個由數組結構組成的有界阻塞隊列。LinkedBlockingQueue:一個由鍊表結構組成的有界阻塞隊列。SynchronousQueue:一個不存儲元素的阻塞隊列,即直接提交給線程不保持它們。PriorityBlockingQueue:一個支持優先級排序的無界阻塞隊列。DelayQueue:一個使用優先級隊列實現的無界阻塞隊列,隻有在延遲期滿時才能從中提取元素。LinkedTransferQueue:一個由鍊表結構組成的無界阻塞隊列。與SynchronousQueue類似,還含有非阻塞方法。LinkedBlockingDeque:一個由鍊表結構組成的雙向阻塞隊列。 比較常用的是 LinkedBlockingQueue,線程池的排隊策略和 BlockingQueue 息息相關。

  參數6:ThreadFactory 線程工廠:線程池創建線程時調用的工廠方法,通過此方法可以設置線程的優先級、線程命名規則以及線程類型(用戶線程還是守護線程)等。

  線程工廠的使用示例如下:

  public static void main(String[] args) { // 創建線程工廠 ThreadFactory threadFactory = new ThreadFactory() { @Override public Thread newThread(Runnable r) { // 創建線程池中的線程 Thread thread = new Thread(r); // 設置線程名稱 thread.setName(Thread- r.hashCode()); // 設置線程優先級(最大值:10) thread.setPriority(Thread.MAX_PRIORITY); //...... return thread; } }; // 創建線程池 ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 0, TimeUnit.SECONDS, new LinkedBlockingQueue(), threadFactory); // 使用自定義的線程工廠 threadPoolExecutor.submit(new Runnable() { @Override public void run() { Thread thread = Thread.currentThread(); System.out.println(String.format(線程:%s,線程優先級:%d, thread.getName(), thread.getPriority())); } }); }

  以上程序的執行結果如下:

  線程池的參數配置要注意什麼(說一下線程池7個參數的含義)(2)

  從上述執行結果可以看出,自定義線程工廠起作用了,線程的名稱和線程的優先級都是通過線程工廠設置的。

  參數7:RejectedExecutionHandler 拒絕策略:當線程池的任務超出線程池隊列可以存儲的最大值之後,執行的策略。

  默認的拒絕策略有以下 4 種:

  AbortPolicy:拒絕并抛出異常。CallerRunsPolicy:使用當前調用的線程來執行此任務。DiscardOldestPolicy:抛棄隊列頭部(最舊)的一個任務,并執行當前任務。DiscardPolicy:忽略并抛棄當前任務。 線程池的默認策略是 AbortPolicy 拒絕并抛出異常。

  總結 本文介紹了線程池的 7 大參數:

  corePoolSize:核心線程數,線程池正常情況下保持的線程數,大戶人家“長工”的數量。maximumPoolSize:最大線程數,當線程池繁忙時最多可以擁有的線程數,大戶人家“長工” “短工”的總數量。keepAliveTime:空閑線程存活時間,沒有活之後“短工”可以生存的最大時間。TimeUnit:時間單位,配合參數 3 一起使用,用于描述參數 3 的時間單位。BlockingQueue:線程池的任務隊列,用于保存線程池待執行任務的容器。ThreadFactory:線程工廠,用于創建線程池中線程的工廠方法,通過它可以設置線程的命名規則、優先級和線程類型。RejectedExecutionHandler:拒絕策略,當任務量超過線程池可以保存的最大任務數時,執行的策略。,

Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
電工職業資格證在哪裡報考好一點(職業技能電工證很難考)
電工職業資格證在哪裡報考好一點(職業技能電工證很難考)
  目前,我國的電工證有四大類,特種作業操作證、電工進網作業許可證、職業資格證書、建築施工特種操作資格證。今天我們來介紹一下其中的特種作業操作證。特種作業操作證:作業種類:電工(俗稱操作證、上崗證),分類:高壓運行維護作業、高壓安裝修造作業、低壓電工作業、安裝、維修、發電、配電。自2010年後,老版特種作業操作證(IC卡)樣本改用二代身份證似的IC卡類新版中...
2025-12-17
全力做好防汛防範措施(七裡崗鄉多措并舉)
全力做好防汛防範措施(七裡崗鄉多措并舉)
     6月份為撫州市主汛期,東臨新區七裡崗鄉搶抓有利時機,開展汛期備戰準備。在衛星水庫的堤壩上,小編看見水庫安全員正在記錄水庫水位,他表示,會密切監視水位,隻要出現險情,會第一時間聯系上級,疏散群衆。   據了解,七裡崗鄉利用宣傳橫幅、牆體标語、小廣播、入戶宣傳等方式,在各村開展防汛宣傳工作,提高村民防汛意識。鄉政府也組織各村工作人員,對區域内河道、池塘...
2025-12-17
泰康人壽培訓筆記(泰康專業化培訓體系)
泰康人壽培訓筆記(泰康專業化培訓體系)
  日前,泰康人壽HWP-ETA(精英财富學院)嘉年華在北京舉行,來自全國的68名健康财富規劃師(HWP)參加此次沉浸式财富研修之旅。本次ETA嘉年華走進泰康集團、泰康資産、漢坤律所、安永會計師事務所、國投泰康信托等,拓寬HWP财富視野,緻力于幫助HWP持續為客戶提供優質财富管理服務。   ETA嘉年華僅是泰康人壽為HWP構建專業化培訓體系的一部分。六年來,...
2025-12-17
博爾特的巅峰時刻(飛人博爾特完成職業足壇首秀)
博爾特的巅峰時刻(飛人博爾特完成職業足壇首秀)
  北京時間8月31日,一直執着于足球夢想的飛人博爾特終于夢想成真了!在他所效力的澳超球隊中央海岸水手與一隻業餘球隊的熱身賽中,博爾特在比賽第72分鐘替補登場,完成了他一直夢寐以求的職業足壇首秀,最終他的球隊也以6-1戰勝了這支業餘球隊。      比賽第56分鐘,博爾特收到了主教練的指示,開始在場邊熱身,看台上的球迷發出了陣陣歡呼。第72分鐘,身披95号球...
2025-12-17
主播被仲裁要求賠錢後還要直播嗎(又一跳槽主播被拘留15天并賠兩千萬)
主播被仲裁要求賠錢後還要直播嗎(又一跳槽主播被拘留15天并賠兩千萬)
  各位小夥伴們大家好呀,這裡是每天都會給大家帶來遊戲資訊的小泛團。      近日有小夥伴爆料稱名為賞金術士的英雄聯盟主播由于在與鬥魚的跳槽官司中敗訴,被判賠償接近兩千萬的賠償金,而賞金術士并沒有執行自己償還違約金的義務,從而被納入了失信人員名單,而且還被拘留了15天。這到底是怎麼一回事呢?      說起賞金術士,相信各位英雄聯盟的老玩家應該都不會太陌生...
2025-12-17
Copyright 2023-2025 - www.tftnews.com All Rights Reserved