中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

怎么使用Java中的線程池

發布時間:2021-07-02 16:17:39 來源:億速云 閱讀:102 作者:chen 欄目:大數據

這篇文章主要講解了“怎么使用Java中的線程池”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么使用Java中的線程池”吧!

Java提供的線程池相關的工具類中,最核心的是ThreadPoolExecutor

ThreadPoolExecutor的構造函數非常復雜,如下面代碼所示,這個最完備的構造函數有7個參數

ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)

下面我們一一介紹這些參數的意義,你可以把線程池類比為一個項目組,而線程就是項目組的成員。

  • corePoolSize:表示線程池保有的最小線程數。有些項目很閑,但是也不能把人都撤了,至少要留 corePoolSize 個人堅守陣地。

  • maximumPoolSize:表示線程池創建的最大線程數。當項目很忙時,就需要加人,但是也不能無限制地加,最多就加到maximumPoolSize個人。當項目閑下來時,就要撤人了,最多能撤到corePoolSize個人。

  • keepAliveTime & unit:上面提到項目根據忙閑來增減人員,那在編程世界里,如何定義忙和閑呢?很簡單,一個線程如果在一段時間內,都沒有執行任務,說明很閑,keepAliveTime 和 unit 就是用來定義這個“一段時間”的參數。也就是說,如果一個線程空閑了keepAliveTime & unit這么久,而且線程池的線程數大于 corePoolSize ,那么這個空閑的線程就要被回收了。

  • workQueue:工作隊列。

  • threadFactory:通過這個參數你可以自定義如何創建線程,例如你可以給線程指定一個有意義的名字。

  • handler:通過這個參數你可以自定義任務的拒絕策略。如果線程池中所有的線程都在忙碌,并且工作隊列也滿了(前提是工作隊列是有界隊列),那么此時提交任務,線程池就會拒絕接收。至于拒絕的策略,你可以通過handler這個參數來指定。ThreadPoolExecutor已經提供了以下4種策略。

CallerRunsPolicy:提交任務的線程自己去執行該任務。
AbortPolicy:默認的拒絕策略,會throws RejectedExecutionException。
DiscardPolicy:直接丟棄任務,沒有任何異常拋出。
DiscardOldestPolicy:丟棄最老的任務,其實就是把最早進入工作隊列的任務丟棄,然后把新任務加入到工作隊列。

Java在1.6版本還增加了 allowCoreThreadTimeOut(boolean value) 方法,它可以讓所有線程都支持超時,這意味著如果項目很閑,就會將項目組的成員都撤走。

感謝各位的閱讀,以上就是“怎么使用Java中的線程池”的內容了,經過本文的學習后,相信大家對怎么使用Java中的線程池這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

弋阳县| 邯郸县| 虹口区| 永胜县| 阜阳市| 新建县| 新竹县| 仪陇县| 广安市| 永安市| 独山县| 呼伦贝尔市| 逊克县| 湘阴县| 临西县| 江安县| 银川市| 军事| 南皮县| 确山县| 蒲城县| 临城县| 沾化县| 邵东县| 祁东县| 张家港市| 新蔡县| 茂名市| 兴国县| 扎鲁特旗| 陈巴尔虎旗| 鞍山市| 襄汾县| 英山县| 休宁县| 安宁市| 穆棱市| 神木县| 濉溪县| 汽车| 双辽市|