Java線程池的設計思路

Java線程池的設計思路

第一部分:皇圖霸業

面試題:講一下線程池的內部原理

爲了便於理解,我們可以結合現實中的場景去結合理解記憶。

  1. 你開了一家大型飯店,飯店需要廚師(線程)。你綜合考慮所計劃招募(corePoolSize)5個,你錢包決定最多能招募(maxiumPoolSize) 20個。
  2. 生意興隆,吃飯的人絡繹不絕,趕緊招募一個廚師, 名聲在外吃飯的人更多啦,趕緊再招募一個廚師,…不知不覺,已經招募了corePoolSize個啦。
  3. 考慮到經濟成本問題,暫且搞點茶水點心,讓顧客排隊等待(BlockingQueue) 吧。一不留神,這隊伍已經太長啦(這可不行,影響交通,城管找茬)。
  4. 捨不得孩子套不着狼,趕緊打電話再從新東方烹飪學校(ThreadFactory) 繼續招聘廚師…,吃飯的客人太多了,已經招募到maxiumPoolSize個啦。
  5. 天下的銀子不可能都讓我賺了, 再來客人,你陪着笑臉心裏想着如何謝絕顧客(RejectExecutionHandler),後面會有一期專門講。

講到這裏,大家都應該能記住其中的5個參數

  1. corePoolSize : 計劃招募人數
  2. maxiumPoolSize :最大能招募人數
  3. BlockingQueue< Runnable > : 排隊的隊列
  4. ThreadFactory : 新東方烹飪學校
  5. RejectExecutionHandler : 拒絕顧客的策略

“原理”源於生活且不高於生活。

第二部分:如何處理臨時工

龍在沙灘被蝦戲,虎落平陽被犬欺

曾經有朋友抱怨遇到過“BT”(其實一點也不)面試官,會問: 線程池有哪幾個參數。To be honest,老司機也會懵逼一下下,不是不知道Just突然說不出來。

科普一下,大家要注意數字7在西方是個非常神聖的數字

一週有幾天,線程池就有幾個參數。第一部分相當於工作了5天,週六日這2天大家更應該興奮啊。

作爲飯店老闆的你很快意識到一個問題,生意有好有壞,養不起這麼多(maxiumPoolSize)個廚師。怎麼辦呢?你下意識的想到了臨時工— 機制


  1. KeepAliveTime : 等待keepAliveTime,若還沒有顧客,就裁撤這些臨時工;

PS : keepAliveTime 到底是按照什麼時間單位來設置呢?你默默地點了一根菸,靈活處理吧。此時的你,已經不侷限於做一個飯店老闆啦。

  1. TimeUnit : 時間單位刻度。

第三部分:也許都是臨時工

誰無虎落平陽日,待我風山再起時.

既然你已經認定自己要做大事,那就得思慮周詳。你默默的看向了操作間。

老闆活不下去地時候,“正式工”的概念也就沒有意義啦。但是考慮到不能傷人心,所以摸摸的設置了一個變量allowCoreThreadTimeOut

allowCoreThreadTimeOut:當設置爲true時,所有的“廚師”都是臨時工。只要keepAliveTime一到,都捲鋪蓋走人。

結尾

此部分有幾個問題需要處理:

  1. 作爲飯店老闆的你,拒絕策略,着實讓人頭疼。
  2. 不甘平凡的你如何做大事。

欲知後事如何,且聽下回分解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章