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

我們一起聊聊并發編程:線程池

開發 前端
首先判斷corePoolSize,其次判斷blockingQueue是否已滿,接著判斷maxPoolSize, 最后使用拒絕策略。 很顯然,基于這種流程,如果隊列是無界的,將永遠沒有機會走到步驟三,也即maxPoolSize沒有 使用,也一定不會走到步驟四。

一、線程池的實現原理

下圖所示為線程池的實現原理:調用方不斷地向線程池中提交任務;線程池中有一組線程,不斷地 從隊列中取任務,這是一個典型的生產者—消費者模型。

要實現這樣一個線程池,有幾個問題需要考慮:

1. 隊列設置多長?如果是無界的,調用方不斷地往隊列中放任務,可能導致內存耗盡。如果是有 界的,當隊列滿了之后,調用方如何處理?

2. 線程池中的線程個數是固定的,還是動態變化的?

3. 每次提交新任務,是放入隊列?還是開新線程?

4. 當沒有任務的時候,線程是睡眠一小段時間?還是進入阻塞?如果進入阻塞,如何喚醒?

針對問題4,有3種做法:

1. 不使用阻塞隊列,只使用一般的線程安全的隊列,也無阻塞/喚醒機制。當隊列為空時,線程 池中的線程只能睡眠一會兒,然后醒來去看隊列中有沒有新任務到來,如此不斷輪詢。

2. 不使用阻塞隊列,但在隊列外部、線程池內部實現了阻塞/喚醒機制。

3. 使用阻塞隊列。

很顯然,做法3最完善,既避免了線程池內部自己實現阻塞/喚醒機制的麻煩,也避免了做法1的睡 眠/輪詢帶來的資源消耗和延遲。正因為如此,接下來要講的
ThreadPoolExector/ScheduledThreadPoolExecutor都是基于阻塞隊列來實現的,而不是一般的隊列, 至此,各式各樣的阻塞隊列就要派上用場了

二、線程池的類繼承體系

在這里,有兩個核心的類: ThreadPoolExector 和
ScheduledThreadPoolExecutor ,后者不僅 可以執行某個任務,還可以周期性地執行任務。

向線程池中提交的每個任務,都必須實現 Runnable 接口,通過最上面的 Executor 接口中的 execute(Runnable command) 向線程池提交任務。

然后,在ExecutorService 中,定義了線程池的關閉接口 shutdown() ,還定義了可以有返回值 的任務,也就是 Callable ,后面會詳細介紹。

三、ThreadPoolExecutor

1、核心數據結構

基于線程池的實現原理,下面看一下ThreadPoolExector的核心數據結構。

每一個線程是一個Worker對象。Worker是ThreadPoolExector的內部類,核心數據結構如下:

由定義會發現,Worker繼承于AQS,也就是說Worker本身就是一把鎖。這把鎖有什么用處呢?用于線程池的關閉、線程執行任務的過程中。

2、核心配置參數解釋

ThreadPoolExecutor在其構造方法中提供了幾個核心配置參數,來配置不同策略的線程池。

上面的各個參數,解釋如下:

1. corePoolSize:在線程池中始終維護的線程個數。

2. maxPoolSize:在corePooSize已滿、隊列也滿的情況下,擴充線程至此值。

3. keepAliveTime/TimeUnit:maxPoolSize 中的空閑線程,銷毀所需要的時間,總線程數收縮 回corePoolSize。

4. blockingQueue:線程池所用的隊列類型。

5. threadFactory:線程創建工廠,可以自定義,有默認值
Executors.defaultThreadFactory()

6. RejectedExecutionHandler:corePoolSize已滿,隊列已滿,maxPoolSize 已滿,最后的拒 絕策略。

下面來看這6個配置參數在任務的提交過程中是怎么運作的。在每次往線程池中提交任務的時候,有 如下的處理流程:

步驟一:判斷當前線程數是否大于或等于corePoolSize。如果小于,則新建線程執行;如果大于, 則進入步驟二。

步驟二:判斷隊列是否已滿。如未滿,則放入;如已滿,則進入步驟三。

步驟三:判斷當前線程數是否大于或等于maxPoolSize。如果小于,則新建線程執行;如果大于, 則進入步驟四。

步驟四:根據拒絕策略,拒絕任務。

總結一下:首先判斷corePoolSize,其次判斷blockingQueue是否已滿,接著判斷maxPoolSize, 最后使用拒絕策略。 很顯然,基于這種流程,如果隊列是無界的,將永遠沒有機會走到步驟三,也即maxPoolSize沒有 使用,也一定不會走到步驟四。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2024-12-10 00:00:25

2025-02-28 08:46:24

框架微服務架構

2023-07-04 13:36:00

同步工具類Phaser

2023-08-10 08:28:46

網絡編程通信

2024-06-04 07:52:04

2025-01-09 10:57:54

2023-10-31 09:04:21

CPU調度Java

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2023-08-04 08:20:56

DockerfileDocker工具

2023-06-30 08:18:51

敏捷開發模式

2022-05-24 08:21:16

數據安全API

2023-09-10 21:42:31

2023-11-29 07:10:50

python協程異步編程

2023-06-30 08:27:20

2022-10-28 07:27:17

Netty異步Future

2022-11-12 12:33:38

CSS預處理器Sass

2022-06-26 09:40:55

Django框架服務

2023-04-26 07:30:00

promptUI非結構化

2022-02-14 07:03:31

網站安全MFA
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草99 | re久久| 自拍视频网站 | 黄网站在线播放 | 欧美中文字幕在线观看 | 精品中文字幕视频 | 欧美日韩亚洲一区 | 精品亚洲一区二区三区 | 最近最新中文字幕 | 国产大片黄色 | 蜜桃视频成人 | 日韩精品在线网站 | 免费在线看黄 | 男女羞羞免费网站 | 国产精品毛片一区二区三区 | 午夜激情视频 | 日韩在线一区二区 | 一级毛片色一级 | 一级毛片免费视频 | 色婷婷激情 | 中文字幕的av | 亚洲国产电影 | caoporn视频在线 | 国产 日韩 欧美 在线 | 欧美亚洲视频 | 欧美激情久久久 | 亚洲成人精品在线 | 三级黄视频在线观看 | 日韩精品久久 | 男人的天堂在线视频 | 色在线看 | 欧美日韩国产中文 | 黄免费观看视频 | 国产免费一区二区 | 羞羞的视频免费观看 | 97久久精品午夜一区二区 | 国产福利在线视频 | 精品久久久久久久 | 精品自拍视频在线观看 | 国产精品一区二区三区在线 | 亚洲精品一二三区 |