成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

美團面試官:核心線程數為0時,線程池如何執行?

開發 前端
當核心線程數為 0 時,當來了一個任務之后,會先將任務添加到任務隊列,同時也會判斷當前工作的線程數是否為 0,如果為 0,則會創建線程來執行線程池的任務,這就是正確的線程池執行流程,同時也是面試官想要的答案。

線程池是 Java 中用于提升程序執行效率的主要手段,也是并發編程中的核心實現技術,并且它也被廣泛的應用在日常項目的開發之中。那問題來了,如果把線程池中的核心線程數設置為 0 時,線程池是如何執行的?

要回答這個問題,我們首先要了解在正常情況下,線程池的執行流程,也就是說當有一個任務來了之后,線程池是如何運行的?

1.線程池的執行流程

正常情況下(核心線程數不為 0 的情況下)線程池的執行流程如下:

  1. 判斷核心線程數:先判斷當前工作線程數是否大于核心線程數,如果結果為 false,則新建線程并執行任務。
  2. 判斷任務隊列:如果大于核心線程數,則判斷任務隊列是否已滿?如果結果為 false,則把任務添加到任務隊列中等待線程執行。
  3. 判斷最大線程數:如果任務隊列已滿,則判斷當前線程數量是否超過最大線程數?如果結果為 false,則新建線程執行此任務。
  4. 判斷是否要執行拒絕策略:如果超過最大線程數,則將執行線程池的拒絕策略。

如下圖所示:

圖片圖片

核心線程數 VS 最大線程數

核心線程數(corePoolSize)和最大線程數(maximumPoolSize)都是線程池中的兩個重要參數,其中:

  1. 核心線程數定義了線程池中最小線程數量,即使這些線程處于空閑狀態,也不會被銷毀。
  2. 最大線程數定義了線程池中允許的最大線程數量,最大線程數等于核心線程數 + 臨時線程數,最大線程數主要是提供了一種機制來應對突發的高并發請求,當有大量任務的時候,可以創建線程數量的上線。

PS:在線程池的使用過程中,最大線程數必須大于等于核心線程數,否則程序執行會報錯。

2.核心線程為0的執行流程

那么問題來了,按照線程池的正常執行流程來看,如果核心線程數為 0 的話,那么當任務來了之后會判斷當前工作的線程數不大于核心線程數,那也就不會創建線程執行任務了,會將任務放到隊列。

但這個結果又很滑稽,有任務來了線程池竟然不執行,而是先放到任務隊列中,這好像有比較奇怪,這就好比你開了一個快遞店,當有快遞來了之后,你想的不是如何派送,而是直接把它丟到倉庫一樣滑稽,這會讓等快遞的人很著急,所以,我們需要驗證一下線程池的執行是否如我們猜想的那般,驗證代碼如下:

// 線程池核心線程數設置為 0
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                0, 10, 1, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(10));
// 給線程池添加任務
threadPoolExecutor.execute(() -> {
    System.out.println("www.javacn.site");
});

最終程序的執行結果如下:

圖片圖片

咦,結果怎么不符合我們的預期呢?為什么任務來了之后,沒有將任務放到任務隊列而是直接執行了呢?

雖然程序執行結果符合正常邏輯,但又和我們了解的線程池執行理論相違背,這是什么原因呢?

查看線程池的執行源碼

帶著這個疑問,我們查看了線程池的執行源碼發現,線程池的執行過程遠比我們想想的復雜,線程池核心源碼如下:

圖片圖片

從上面源碼可以看出,當我們將任務添加到隊列的時候,線程池會判斷工作的線程數是否為 0,也就是上面圈出來的那行代碼,如果當前工作線程為 0 的話,會創建線程執行任務。哦,原來如此,這樣,就能將理論和實踐對應上了。

也就是說,當核心線程數為 0 時,當來了一個任務之后,會先將任務添加到任務隊列,同時也會判斷當前工作的線程數是否為 0,如果為 0,則會創建線程來執行線程池的任務,這就是正確的線程池執行流程,同時也是面試官想要的答案。

責任編輯:武曉燕 來源: Java中文社群
相關推薦

2024-06-20 13:59:26

2024-09-12 08:35:06

2024-09-09 15:09:30

2024-04-02 09:45:27

線程池Executors開發

2023-05-22 08:17:04

2024-03-11 18:18:58

項目Spring線程池

2024-05-16 17:58:30

線程任務線程通訊線程池

2024-09-11 22:51:19

線程通訊Object

2021-11-29 10:55:11

線程池Java面試

2025-01-09 11:24:59

線程池美團動態配置中心

2022-06-24 06:43:57

線程池線程復用

2020-05-22 08:11:48

線程池JVM面試

2024-10-31 09:30:05

線程池工具Java

2022-02-14 16:08:15

開源項目線程池動態可監控

2021-05-08 07:53:33

面試線程池系統

2021-03-29 08:47:24

線程面試官線程池

2023-12-20 14:35:37

Java虛擬線程

2021-04-08 10:51:10

主線程子線程Thread

2022-03-28 08:31:29

線程池定時任務

2010-08-27 10:53:14

面試
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 观看av | 日韩在线视频播放 | 国产精品久久久久久久久免费相片 | 国产精品日韩欧美一区二区三区 | 亚洲高清视频一区 | 91久久国产综合久久 | 欧美国产日韩一区二区三区 | 国产精品精品视频 | 中文字幕中文字幕 | 国产午夜精品一区二区三区嫩草 | av午夜电影| 国产高清视频在线播放 | 久久com| 三级黄视频在线观看 | 久久99视频 | 亚洲在线成人 | 国产精品69久久久久水密桃 | 国产毛片毛片 | 亚洲欧洲成人av每日更新 | 久草福利| 好姑娘影视在线观看高清 | 日韩视频二区 | 成人av观看 | 亚洲国产精品99久久久久久久久 | 一级片av| 午夜理伦三级理论三级在线观看 | 国产精品久久久久久久久久免费 | 女人牲交视频一级毛片 | 日韩一区二区在线视频 | 天天操伊人 | 久久久久久亚洲国产精品 | 99亚洲精品| 国产小u女发育末成年 | 国产蜜臀97一区二区三区 | 国产农村妇女毛片精品久久麻豆 | 国产高清av免费观看 | 日韩欧美中文在线 | 亚洲国产电影 | 国产精品一区二区在线免费观看 | 亚洲成人黄色 | 欧美日韩综合 |