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

當(dāng)前位置:首頁 > 科技  > 軟件

為什么阿里建議你不要使用Executors來創(chuàng)建線程池?

來源: 責(zé)編: 時(shí)間:2024-01-03 09:12:05 231觀看
導(dǎo)讀哈嘍,大家好,我是了不起。阿里作為國(guó)內(nèi)Java使用最多的大廠,他出版了一部《阿里巴巴Java開發(fā)手冊(cè)》,不知道大家看過沒,沒有看過的話,建議大家看看。對(duì)于我們編程養(yǎng)成良好的習(xí)慣還是很有幫助的,最近我在看到并發(fā)這一規(guī)約的時(shí)候

哈嘍,大家好,我是了不起。RlM28資訊網(wǎng)——每日最新資訊28at.com

阿里作為國(guó)內(nèi)Java使用最多的大廠,他出版了一部《阿里巴巴Java開發(fā)手冊(cè)》,不知道大家看過沒,沒有看過的話,建議大家看看。RlM28資訊網(wǎng)——每日最新資訊28at.com

對(duì)于我們編程養(yǎng)成良好的習(xí)慣還是很有幫助的,最近我在看到并發(fā)這一規(guī)約的時(shí)候,他們就明確了一點(diǎn):線程池不允許使用 Executors來創(chuàng)建。RlM28資訊網(wǎng)——每日最新資訊28at.com

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

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

然而,像阿里巴巴這樣的大型技術(shù)公司卻建議開發(fā)者避免使用Executors來創(chuàng)建線程池。為什么會(huì)有這樣的建議呢?RlM28資訊網(wǎng)——每日最新資訊28at.com

1、文檔出處

圖片圖片RlM28資訊網(wǎng)——每日最新資訊28at.com

2、Executors類的問題

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

1.1 默認(rèn)線程工廠的局限性

Executors使用的默認(rèn)線程工廠創(chuàng)建的線程都是非守護(hù)線程,且沒有設(shè)置線程名稱和優(yōu)先級(jí)。這在某些應(yīng)用場(chǎng)景中可能不是最佳選擇。RlM28資訊網(wǎng)——每日最新資訊28at.com

1.2 無限制的任務(wù)隊(duì)列

某些由Executors創(chuàng)建的線程池,如newCachedThreadPool,使用了無限制的任務(wù)隊(duì)列。這意味著如果任務(wù)提交速度超過線程處理速度,會(huì)導(dǎo)致內(nèi)存溢出風(fēng)險(xiǎn)。RlM28資訊網(wǎng)——每日最新資訊28at.com

1.3 缺乏靈活性和透明度

使用Executors快捷方法創(chuàng)建的線程池隱藏了許多重要的配置細(xì)節(jié),比如線程數(shù)量和任務(wù)隊(duì)列類型,這降低了配置的靈活性和透明度。RlM28資訊網(wǎng)——每日最新資訊28at.com

3、如何創(chuàng)建線程池呢?

鑒于上述問題,阿里巴巴在其Java開發(fā)手冊(cè)中建議開發(fā)者不要使用Executors類的快捷方法創(chuàng)建線程池,RlM28資訊網(wǎng)——每日最新資訊28at.com

那么我們應(yīng)該如何創(chuàng)建線程池呢?RlM28資訊網(wǎng)——每日最新資訊28at.com

答案就是使用:ThreadPoolExecutor。RlM28資訊網(wǎng)——每日最新資訊28at.com

我們可以看下這個(gè)類:RlM28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片RlM28資訊網(wǎng)——每日最新資訊28at.com

ThreadPoolExecutor構(gòu)造函數(shù)允許開發(fā)者自定義線程池的多個(gè)參數(shù),包括核心線程數(shù)、最大線程數(shù)、空閑線程存活時(shí)間、任務(wù)隊(duì)列、線程工廠和拒絕策略等。這些自定義的配置可以更好地滿足不同的應(yīng)用需求。RlM28資訊網(wǎng)——每日最新資訊28at.com

所以,創(chuàng)建高效和可靠的線程池時(shí)應(yīng)考慮以下幾點(diǎn):RlM28資訊網(wǎng)——每日最新資訊28at.com

  • 合理設(shè)置線程數(shù)量:線程池大小應(yīng)根據(jù)系統(tǒng)資源和需求合理設(shè)置。
  • 選擇適當(dāng)?shù)娜蝿?wù)隊(duì)列:根據(jù)任務(wù)類型和執(zhí)行策略選擇合適的隊(duì)列類型。
  • 自定義線程工廠:可以設(shè)置更有意義的線程名稱,方便問題追蹤和調(diào)試。
  • 合理的拒絕策略:在任務(wù)隊(duì)列滿時(shí)選擇合適的拒絕策略,如AbortPolicy、CallerRunsPolicy等。

下面給出一段最佳實(shí)踐代碼供大家參考:RlM28資訊網(wǎng)——每日最新資訊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) {        // 核心線程數(shù)        int corePoolSize = 5;        // 最大線程數(shù)        int maximumPoolSize = 10;        // 當(dāng)線程數(shù)大于核心線程數(shù)時(shí),多余空閑線程的存活時(shí)間        long keepAliveTime = 5000;        // 時(shí)間單位,這里使用毫秒        TimeUnit unit = TimeUnit.MILLISECONDS;        // 任務(wù)隊(duì)列,使用有界隊(duì)列可以避免資源耗盡的問題        ArrayBlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(100);        // 創(chuàng)建線程池        ThreadPoolExecutor executor = new ThreadPoolExecutor(                corePoolSize,                maximumPoolSize,                keepAliveTime,                unit,                workQueue        );        // 示例任務(wù)提交        for (int i = 0; i < 20; i++) {            int finalI = i;            executor.execute(() -> {                System.out.println("Executing task " + finalI + " using thread " + Thread.currentThread().getName());                try {                    // 模擬任務(wù)執(zhí)行時(shí)間                    Thread.sleep(1000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            });        }        // 關(guān)閉線程池        executor.shutdown();    }}

這段代碼展示了如何使用 ThreadPoolExecutor 來創(chuàng)建一個(gè)自定義的線程池。以下是關(guān)鍵配置的說明:RlM28資訊網(wǎng)——每日最新資訊28at.com

  • corePoolSize(核心線程數(shù)):線程池保持活躍狀態(tài)的線程數(shù)量,即使這些線程處于空閑狀態(tài)。
  • maximumPoolSize(最大線程數(shù)):線程池能夠容納的最大線程數(shù)量。
  • keepAliveTime(線程存活時(shí)間):當(dāng)線程數(shù)量超過核心線程數(shù)時(shí),多余的空閑線程可以存活的時(shí)間。
  • unit(時(shí)間單位):用于 keepAliveTime 的時(shí)間單位。
  • workQueue(任務(wù)隊(duì)列):存儲(chǔ)待執(zhí)行任務(wù)的隊(duì)列。這里使用了 ArrayBlockingQueue 作為有界隊(duì)列,以避免資源耗盡的風(fēng)險(xiǎn)。

創(chuàng)建線程池后,通過 execute 方法提交任務(wù)。最后,使用 shutdown 方法來關(guān)閉線程池,以釋放資源。RlM28資訊網(wǎng)——每日最新資訊28at.com

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

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 性能篇:字符串性能優(yōu)化不容小覷

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

標(biāo)簽:
  • 熱門焦點(diǎn)
  • K60至尊版剛預(yù)熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛?cè)缁鹑巛钡男麄髁薑60 Ultra的各種技術(shù)和硬件配置,作為競(jìng)品的一加也坐不住了。一加中國(guó)區(qū)總裁李杰發(fā)布了兩條微博,表示在自家的一加Ace2上早就已經(jīng)采用了和PixelWo
  • 掘力計(jì)劃第 20 期:Flutter 混合開發(fā)的混亂之治

    在掘力計(jì)劃系列活動(dòng)第20場(chǎng),《Flutter 開發(fā)實(shí)戰(zhàn)詳解》作者,掘金優(yōu)秀作者,Github GSY 系列目負(fù)責(zé)人戀貓的小郭分享了Flutter 混合開發(fā)的混亂之治。Flutter 基于自研的 Skia 引擎
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運(yùn)營(yíng)研究社作者 | 張知白編輯 | 楊佩汶設(shè)計(jì) | 晏談夢(mèng)潔這個(gè)暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個(gè)月超過 12 億;有的「博主」火了&m
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業(yè) 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁&ldquo;充值中心&rdquo;入口上線了本機(jī)生活界面。壹覽商業(yè)發(fā)現(xiàn),該界面目前主要
  • “又被陳思誠(chéng)騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國(guó)產(chǎn)懸疑電影,成了陳思誠(chéng)的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠(chéng)再度風(fēng)頭無兩。你可以說陳思誠(chéng)的
  • 猿輔導(dǎo)與新東方的兩種“歸途”

    作者|卓心月 出品|零態(tài)LT(ID:LingTai_LT)如何成為一家偉大企業(yè)?答案一定是對(duì)&ldquo;勢(shì)&rdquo;的把握,這其中最關(guān)鍵的當(dāng)屬對(duì)企業(yè)戰(zhàn)略的制定,且能夠站在未來看現(xiàn)在,即使這其中的
  • 簽約井川里予、何丹彤,單視頻點(diǎn)贊近千萬,MCN黑馬永恒文希快速崛起!

    來源:視聽觀察永恒文希傳媒作為一家MCN公司,說起它的名字來,可能大家會(huì)覺得有點(diǎn)兒陌生,但是說出來下面一串的名字之后,或許大家就會(huì)感到震驚,原來這么多網(wǎng)紅,都簽約這家公司了。根
  • iQOO Neo8系列新品發(fā)布會(huì)

    旗艦雙芯 更強(qiáng)更Pro
  • Counterpoint :OPPO雙旗艦戰(zhàn)略全面落地 高端產(chǎn)品銷量增長(zhǎng)22%

    2023年6月30日,全球行業(yè)分析機(jī)構(gòu)Counterpoint Research發(fā)布的《中國(guó)智能手機(jī)高端市場(chǎng)白皮書》顯示,中國(guó)智能手機(jī)品牌正在尋求高質(zhì)量發(fā)展,中國(guó)高端智能
Top 主站蜘蛛池模板: 罗山县| 贞丰县| 朔州市| 永川市| 玉溪市| 布拖县| 临汾市| 日土县| 遵义县| 广饶县| 华蓥市| 扎鲁特旗| 曲沃县| 梨树县| 清水河县| 泸州市| 霍城县| 长岭县| 绍兴县| 柘城县| 襄樊市| 望城县| 横峰县| 临武县| 内乡县| 伊金霍洛旗| 宜兰市| 黔南| 西畴县| 东莞市| 望江县| 玛纳斯县| 古蔺县| 霍林郭勒市| 仪征市| 清苑县| 马龙县| 永宁县| 建瓯市| 陇西县| 文水县|