日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

為什么阿里建議你不要使用Executors來創建線程池?

來源: 責編: 時間:2024-01-03 09:12:05 213觀看
導讀哈嘍,大家好,我是了不起。阿里作為國內Java使用最多的大廠,他出版了一部《阿里巴巴Java開發手冊》,不知道大家看過沒,沒有看過的話,建議大家看看。對于我們編程養成良好的習慣還是很有幫助的,最近我在看到并發這一規約的時候

哈嘍,大家好,我是了不起。szO28資訊網——每日最新資訊28at.com

阿里作為國內Java使用最多的大廠,他出版了一部《阿里巴巴Java開發手冊》,不知道大家看過沒,沒有看過的話,建議大家看看。szO28資訊網——每日最新資訊28at.com

對于我們編程養成良好的習慣還是很有幫助的,最近我在看到并發這一規約的時候,他們就明確了一點:線程池不允許使用 Executors來創建。szO28資訊網——每日最新資訊28at.com

在多線程編程中,線程池是一種重要的資源管理工具,用于提高程序效率和降低資源消耗。szO28資訊網——每日最新資訊28at.com

Java通過java.util.concurrent包提供了豐富的線程池管理工具,其中Executors類是創建線程池的常用工具。szO28資訊網——每日最新資訊28at.com

然而,像阿里巴巴這樣的大型技術公司卻建議開發者避免使用Executors來創建線程池。為什么會有這樣的建議呢?szO28資訊網——每日最新資訊28at.com

1、文檔出處

圖片圖片szO28資訊網——每日最新資訊28at.com

2、Executors類的問題

Executors類提供了幾種快捷方法來創建不同類型的線程池,例如newFixedThreadPool、newCachedThreadPool和newSingleThreadExecutor等。這些方法雖然使用方便,但存在以下幾個問題:szO28資訊網——每日最新資訊28at.com

1.1 默認線程工廠的局限性

Executors使用的默認線程工廠創建的線程都是非守護線程,且沒有設置線程名稱和優先級。這在某些應用場景中可能不是最佳選擇。szO28資訊網——每日最新資訊28at.com

1.2 無限制的任務隊列

某些由Executors創建的線程池,如newCachedThreadPool,使用了無限制的任務隊列。這意味著如果任務提交速度超過線程處理速度,會導致內存溢出風險。szO28資訊網——每日最新資訊28at.com

1.3 缺乏靈活性和透明度

使用Executors快捷方法創建的線程池隱藏了許多重要的配置細節,比如線程數量和任務隊列類型,這降低了配置的靈活性和透明度。szO28資訊網——每日最新資訊28at.com

3、如何創建線程池呢?

鑒于上述問題,阿里巴巴在其Java開發手冊中建議開發者不要使用Executors類的快捷方法創建線程池,szO28資訊網——每日最新資訊28at.com

那么我們應該如何創建線程池呢?szO28資訊網——每日最新資訊28at.com

答案就是使用:ThreadPoolExecutor。szO28資訊網——每日最新資訊28at.com

我們可以看下這個類:szO28資訊網——每日最新資訊28at.com

圖片圖片szO28資訊網——每日最新資訊28at.com

ThreadPoolExecutor構造函數允許開發者自定義線程池的多個參數,包括核心線程數、最大線程數、空閑線程存活時間、任務隊列、線程工廠和拒絕策略等。這些自定義的配置可以更好地滿足不同的應用需求。szO28資訊網——每日最新資訊28at.com

所以,創建高效和可靠的線程池時應考慮以下幾點:szO28資訊網——每日最新資訊28at.com

  • 合理設置線程數量:線程池大小應根據系統資源和需求合理設置。
  • 選擇適當的任務隊列:根據任務類型和執行策略選擇合適的隊列類型。
  • 自定義線程工廠:可以設置更有意義的線程名稱,方便問題追蹤和調試。
  • 合理的拒絕策略:在任務隊列滿時選擇合適的拒絕策略,如AbortPolicy、CallerRunsPolicy等。

下面給出一段最佳實踐代碼供大家參考:szO28資訊網——每日最新資訊28at.com

import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class ThreadPoolExample {    public static void main(String[] args) {        // 核心線程數        int corePoolSize = 5;        // 最大線程數        int maximumPoolSize = 10;        // 當線程數大于核心線程數時,多余空閑線程的存活時間        long keepAliveTime = 5000;        // 時間單位,這里使用毫秒        TimeUnit unit = TimeUnit.MILLISECONDS;        // 任務隊列,使用有界隊列可以避免資源耗盡的問題        ArrayBlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(100);        // 創建線程池        ThreadPoolExecutor executor = new ThreadPoolExecutor(                corePoolSize,                maximumPoolSize,                keepAliveTime,                unit,                workQueue        );        // 示例任務提交        for (int i = 0; i < 20; i++) {            int finalI = i;            executor.execute(() -> {                System.out.println("Executing task " + finalI + " using thread " + Thread.currentThread().getName());                try {                    // 模擬任務執行時間                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            });        }        // 關閉線程池        executor.shutdown();    }}

這段代碼展示了如何使用 ThreadPoolExecutor 來創建一個自定義的線程池。以下是關鍵配置的說明:szO28資訊網——每日最新資訊28at.com

  • corePoolSize(核心線程數):線程池保持活躍狀態的線程數量,即使這些線程處于空閑狀態。
  • maximumPoolSize(最大線程數):線程池能夠容納的最大線程數量。
  • keepAliveTime(線程存活時間):當線程數量超過核心線程數時,多余的空閑線程可以存活的時間。
  • unit(時間單位):用于 keepAliveTime 的時間單位。
  • workQueue(任務隊列):存儲待執行任務的隊列。這里使用了 ArrayBlockingQueue 作為有界隊列,以避免資源耗盡的風險。

創建線程池后,通過 execute 方法提交任務。最后,使用 shutdown 方法來關閉線程池,以釋放資源。szO28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-56555-0.html為什么阿里建議你不要使用Executors來創建線程池?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 性能篇:字符串性能優化不容小覷

下一篇: Python的神奇算術,用代碼輕松求和

標簽:
  • 熱門焦點
  • 官方承諾:K60至尊版將會首批升級MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版將會搭載天璣9200+處理器和獨顯芯片X7的同時,Redmi給出了官方承諾,K60至尊重大更新首批升級,會首批推送MIUI 15。也就是說雖然
  • 6月iOS設備性能榜:M2穩居榜首 A系列只能等一手3nm來救

    沒有新品發布,自然iOS設備性能榜的上榜設備就沒有什么更替,僅僅只有跑分變化而產生的排名變動,畢竟蘋果新品的發布節奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一
  • 華為Mate60標準版細節曝光:經典星環相機模組回歸

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
  • 滴滴違法違規被罰80.26億 共存在16項違法事實

    滴滴違法違規被罰80.26億 存在16項違法事實開始于2121年7月,歷經一年時間,網絡安全審查辦公室對“滴滴出行”網絡安全審查終于有了一個暫時的結束。據“網信
  • 上海舉辦人工智能大會活動,建設人工智能新高地

    人工智能大會在上海浦江兩岸隆重拉開帷幕,人工智能新技術、新產品、新應用、新理念集中亮相。8月30日晚,作為大會的特色活動之一的上海人工智能發展盛典人工
  • 利用職權私自解除被封帳號 Meta開除20多名員工

    11月18日消息,據外媒援引知情人士表示,過去一年時間內,Facebook母公司Meta解雇或處罰了20多名員工以及合同工,指控這些人通過內部系統以不當方式重置用戶帳號,其
Top 主站蜘蛛池模板: 高邮市| 隆德县| 元阳县| 澎湖县| 西贡区| 德令哈市| 探索| 德昌县| 灵丘县| 屯昌县| 海盐县| 翁牛特旗| 镇康县| 远安县| 洪泽县| 昆山市| 德化县| 历史| 犍为县| 和林格尔县| 仙居县| 镇平县| 个旧市| 崇阳县| 桂东县| 宾川县| 巴青县| 上杭县| 威海市| 克什克腾旗| 宜黄县| 方正县| 宣武区| 裕民县| 阿克陶县| 泸州市| 偏关县| 三穗县| 天气| 合肥市| 安陆市|