首页
/
每日頭條
/
職場
/
自己設計線程池要從哪些方面考慮
自己設計線程池要從哪些方面考慮
更新时间:2026-06-08 19:38:40

  面試題1:ThreadPoolExecutor 有哪些常用的方法?

  ThreadPoolExecutor有如下常用方法:

  submit()/execute():執行線程池shutdown()/shutdownNow():終止線程池isShutdown():判斷線程是否終止getActiveCount():正在運行的線程數getCorePoolSize():獲取核心線程數getMaximumPoolSize():獲取最大線程數getQueue():獲取線程池中的任務隊列allowCoreThreadTimeOut(boolean):設置空閑時是否回收核心線程 這些方法可以用來終止線程池、線程池監控等。

  面試題2:說說submit(和 execute兩個方法有什麼區别?

  submit() 和 execute() 都是用來執行線程池的,隻不過使用 execute() 執行線程池不能有返回方法,而使用 submit() 可以使用 Future 接收線程池執行的返回值。

  面試題3:shutdownNow() 和 shutdown() 兩個方法有什麼區别?

  shutdownNow() 和 shutdown() 都是用來終止線程池的,它們的區别是,使用 shutdown() 程序不會報錯,也不會立即終止線程,它會等待線程池中的緩存任務執行完之後再退出,執行了 shutdown() 之後就不能給線程池添加新任務了;shutdownNow() 會試圖立馬停止任務,如果線程池中還有緩存任務正在執行,則會抛出 java.lang.InterruptedExceptIOn: sleep interrupted 異常。

  面試題4:了解過線程池的工作原理嗎?

  自己設計線程池要從哪些方面考慮(線程池必須要會的10道面試題)(1)

  當線程池中有任務需要執行時,線程池會判斷如果線程數量沒有超過核心數量就會新建線程池進行任務執行,如果線程池中的線程數量已經超過核心線程數,這時候任務就會被放入任務隊列中排隊等待執行;如果任務隊列超過最大隊列數,并且線程池沒有達到最大線程數,就會新建線程來執行任務;如果超過了最大線程數,就會執行拒絕執行策略。

  面試題5:線程池中核心線程數量大小怎麼設置?

  「CPU密集型任務」:比如像加解密,壓縮、計算等一系列需要大量耗費 CPU 資源的任務,大部分場景下都是純 CPU 計算。盡量使用較小的線程池,一般為CPU核心數 1。因為CPU密集型任務使得CPU使用率很高,若開過多的線程數,會造成CPU過度切換。

  「IO密集型任務」:比如像 MySQL 數據庫、文件的讀寫、網絡通信等任務,這類任務不會特别消耗 CPU 資源,但是 IO 操作比較耗時,會占用比較多時間。可以使用稍大的線程池,一般為2*CPU核心數。IO密集型任務CPU使用率并不高,因此可以讓CPU在等待IO的時候有其他線程去處理别的任務,充分利用CPU時間。

  另外:線程的平均工作時間所占比例越高,就需要越少的線程;線程的平均等待時間所占比例越高,就需要越多的線程;

  以上隻是理論值,實際項目中建議在本地或者測試環境進行多次調優,找到相對理想的值大小。

  面試題6:線程池為什麼需要使用(阻塞)隊列?

  主要有三點:

  因為線程若是無限制的創建,可能會導緻内存占用過多而産生OOM,并且會造成cpu過度切換。創建線程池的消耗較高。 面試題7:線程池為什麼要使用阻塞隊列而不使用非阻塞隊列?

  阻塞隊列可以保證任務隊列中沒有任務時阻塞獲取任務的線程,使得線程進入wait狀态,釋放cpu資源。

  當隊列中有任務時才喚醒對應線程從隊列中取出消息進行執行。

  使得在線程不至于一直占用cpu資源。

  (線程執行完任務後通過循環再次從任務隊列中取出任務進行執行,代碼片段如下

  while (task != null || (task = getTask()) != null) {})。

  不用阻塞隊列也是可以的,不過實現起來比較麻煩而已,有好用的為啥不用呢?

  面試題8:了解線程池狀态嗎?

  通過獲取線程池狀态,可以判斷線程池是否是運行狀态、可否添加新的任務以及優雅地關閉線程池等。

  自己設計線程池要從哪些方面考慮(線程池必須要會的10道面試題)(2)

  RUNNING:線程池的初始化狀态,可以添加待執行的任務。SHUTDOWN:線程池處于待關閉狀态,不接收新任務僅處理已經接收的任務。STOP:線程池立即關閉,不接收新的任務,放棄緩存隊列中的任務并且中斷正在處理的任務。TIDYING:線程池自主整理狀态,調用 terminated() 方法進行線程池整理。TERMINATED:線程池終止狀态。 面試題9:知道線程池中線程複用原理嗎?

  線程池将線程和任務進行解耦,線程是線程,任務是任務,擺脫了之前通過 Thread 創建線程時的一個線程必須對應一個任務的限制。

  在線程池中,同一個線程可以從阻塞隊列中不斷獲取新任務來執行,其核心原理在于線程池對 Thread 進行了封裝,并不是每次執行任務都會調用 Thread.start() 來創建新線程,而是讓每個線程去執行一個“循環任務”,在這個“循環任務”中不停的檢查是否有任務需要被執行,如果有則直接執行,也就是調用任務中的 run 方法,将 run 方法當成一個普通的方法執行,通過這種方式将隻使用固定的線程就将所有任務的 run 方法串聯起來。

  面試題10:說說線程池創建需要的那幾個核心參數的含義

  ThreadPoolExecutor 最多包含以下七個參數:

  corePoolSize:線程池中的核心線程數maximumPoolSize:線程池中最大線程數keepAliveTime:閑置超時時間unit:keepAliveTime 超時時間的單位(時/分/秒等)workQueue:線程池中的任務隊列threadFactory:為線程池提供創建新線程的線程工廠rejectedExecutionHandler:線程池任務隊列超過最大值之後的拒絕策略總結 本文通過沒有使用線程池帶來的弊端,Executors介紹,Executors的六種方法介紹、如何使用線程池,了解線程池原理,核心參數,以及10到線程池面試題。

  「成功不是将來才有的,而是從決定去做的那一刻起,持續累積而成。」

  ,

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
推荐阅读
甘薇産子生的還是剖的(甘薇挺臨盆巨肚工作到淩晨)
甘薇産子生的還是剖的(甘薇挺臨盆巨肚工作到淩晨)
  近日懷二胎即将臨盆的甘薇在微博曬出一組工作照,挺着大肚子的她直接累得睡在椅子上。甘薇附文:“終于彩排完了。太累了,累得我想哭。忙完發布會,我也該休息了。公司的同事們都怕我在台上突然發作,要生了怎麼辦,恨不得,把救護車和輪椅都給我準備好了。”      被封為“拼命三娘”的甘薇,6月份也曾在微博曬出工作照,并配文稱:“從早上十一點開會,腰都快要累斷了。到現...
2026-06-08
安德魯和艾瑪的愛情(艾瑪史東似魔戒精靈弓箭手)
安德魯和艾瑪的愛情(艾瑪史東似魔戒精靈弓箭手)
  自從《愛樂之城》名聲大噪後,奧斯卡影後艾瑪史東陸續接下各種戲路,近期曝光正在拍攝的Netflix新劇《Maniac》,仔細一看那頭金色長發與奧蘭多布魯知名作品《魔戒》裡的精靈弓箭手相似度近乎百分百呀!      耳朵同樣利用特殊化妝變成精靈耳,咖啡色鬥篷配上長靴,背着長長的弓箭,新戲造型一公開,連奧蘭多布魯(Orlando Bloom)也在instagr...
2026-06-08
鄉鎮控辍保學工作開展(鳳山鎮紮實開展控辍保學工作)
鄉鎮控辍保學工作開展(鳳山鎮紮實開展控辍保學工作)
  在鞏固拓展脫貧攻堅成果與鄉村振興有效銜接的進程中,義務教育保障依然是“兩不愁三保障”的底線和硬性指标。鳳山鎮黨委、政府高度重視義務教育保障工作,嚴格落實"一個都不能少"控辍方針,加大控辍保學工作力度,保障适齡兒童受教育的權利,兜牢義務教育保障底線。      近日,鳳山鎮黨委書記陳業忠、鳳山鎮武裝部長陳家賢率鳳山鎮第四初級中學副校長、班主任、石榕村小學校...
2026-06-08
林生斌現任妻子分享生活(僅用6月就從實習生)
林生斌現任妻子分享生活(僅用6月就從實習生)
  林生斌的事情發酵8天後,他終于出來回應了。一口氣發了5條動态,字裡行間都是在說自己很懷念逝去的妻兒、讓大家不要傷害他現在的妻兒、他對他嶽父嶽母很好,沒有這幾天傳的那麼糟。      在這幾條動态中,關于林生斌的現任妻子小樂的動态,引起了小8的注意。這些天,關于小樂的傳言,說什麼的都有,有說她是小三上位的,有說她跟林生斌早就認識的,還有說她跟保姆是親戚的。...
2026-06-08
天堂2血盟什麼職業最簡單(血盟職業不知道怎麼選)
天堂2血盟什麼職業最簡單(血盟職業不知道怎麼選)
  《天堂2:血盟》是NCSOFT國内唯一首授權的手遊,而NCSOFT是《天堂2》的開發工作室,《天堂2:血盟》和《天堂2》的關心自然不用小編我多說,雖然《天堂2》是一個老IP,但是實際上遊戲中的萌新還是不少的,對于萌新來說,在《天堂2:血盟》中最先要面對的就是選擇職業,面對《天堂2:血盟》的9個職業,應該怎麼選,就成了衆多萌新玩家需要面對的問題,今天小編就...
2026-06-08
Copyright 2023-2026 - www.tftnews.com All Rights Reserved