91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

線程池的工作流程是什么

發布時間:2021-10-28 14:36:37 來源:億速云 閱讀:154 作者:iii 欄目:web開發

本篇內容主要講解“線程池的工作流程是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“線程池的工作流程是什么”吧!

線程池的各種參數

面試的時候最常問的就是線程池的各種參數的含義,和線程池的整個運行流程,這個一定要會

ThreadPoolExecutor一共有4個構造函數,但最后調用的都是如下構造函數

參數含義
corePoolSize核心線程池大小
maximumPoolSize線程池最大容量大小
keepAliveTime線程池空閑時,線程存活的時間
TimeUnit線程活動保持時間的單位
BlockingQueue<Runnable>任務隊列,用于保存等待執行的任務的阻塞隊列
ThreadFactory用于設置線程的工廠
RejectedExecutionHandler飽和策略

來類比學習一下這些參數,我們把線程池類比為項目組,線程是這個公司的成員

corePoolSize:線程池中最少的線程數,一個項目組總得有corePoolSize人堅守陣地,都是簽訂勞動合同了,不能隨便撤。

maximumPoolSize:當項目很忙時,就得加人,請其他項目組的人來幫忙。但是公司空間有限,最多只能加到maximumPoolSize個人。當項目閑了,就得撤人了,最多能撤到corePoolSize個人

keepAliveTime &  unit:上面提到項目根據忙閑來增減人員,那在編程世界里,如何定義忙和閑呢?如果一個線程在keepAliveTime(時間數字)*  unit(時間單位)時間內都沒有執行任務,說明這個線程很閑。如果此時線程數大于corePoolSize,這個線程就要被回收了

workQueue:就是任務隊列

threadFactory:自定義如果創建線程,例如給線程指定一個有意義的名字

handler:workQueue滿了(排期滿了),再提交任務,該怎么處理呢?這個就是處理策略,線程池提供了4種策略,你也可以實現RejectedExecutionHandler接口來自定義策略

策略
AbortPolicy丟棄任務,拋運行時異常(默認的處理策略)
CallerRunsPolicy執行任務
DiscardPolicy忽視,什么都不會發生
DiscardOldestPolicy丟棄隊列里最近的一個任務,并執行當前任務

線程池的工作流程

可以參照一下源碼理解一下下面的流程

1.線程池剛創建時,里面沒有一個線程。任務隊列是作為參數傳進來的。不過,就算隊列里面有任務,線程池也不會馬上執行他們。

2.當調用execute()方法添加一個任務時,線程池會做如下判斷:

a. 如果正在運行的線程數量小于corePoolSize,那么馬上創建線程運行這個任務

b. 如果正在運行的線程數量大于或等于corePoolSize,那么將這個任務放入隊列

c. 如果這時候隊列滿了,而且正在運行的線程數量小于maximunPoolSize,那么還是要創建非核心線程立刻運行這個任務

d.  如果隊列滿了,而且正在運行的線程數量大于或等于maximunPoolSize,那么線程池會拋出RejectedExecutionException

3.當一個線程完成任務時,它會從隊列中取下一個任務來執行

4.當一個線程無事可做,超過一定的時間(keepAliveTime)時,線程池會判斷,如果當前運行的線程數大于corePoolSize,那么這個線程就被停掉。所以線程池的所有任務完成后,它最終會收縮到corePoolSize的大小

可以用如下圖來表示整體流程

線程池的工作流程是什么

到此,相信大家對“線程池的工作流程是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汪清县| 海淀区| 于田县| 增城市| 易门县| 固始县| 精河县| 郧西县| 巴马| 岱山县| 微博| 阜平县| 政和县| 安龙县| 都安| 兴城市| 保德县| 平和县| 喀喇沁旗| 聊城市| 威海市| 英山县| 潜山县| 巢湖市| 西乌| 贵州省| 吉安市| 太仓市| 西贡区| 越西县| 双城市| 甘肃省| 昭觉县| 卢氏县| 尼勒克县| 竹山县| 达尔| 阿城市| 东乡县| 乃东县| 齐齐哈尔市|