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

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

程序員必會之最詳細的ThreadPoolExecutor 線程池七大參數含義

來源: 責編: 時間:2023-10-13 14:36:37 247觀看
導讀線程池的 7 大參數整理。public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHa

hBp28資訊網——每日最新資訊28at.com

線程池的 7 大參數整理。hBp28資訊網——每日最新資訊28at.com

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

corePoolSize 線程池中長期存活的線程數

ThreadPoolExecutor 在創建之初,是不會立即初始化corePoolSize數量的Thread的,而是通過外部request來一個一個的創建,當達到corePoolSize數目之后,就會維持至少corePoolSize數目的Thread在pool中,哪怕他們都處于空閑狀態(idle)。corePoolSize >= 0。hBp28資訊網——每日最新資訊28at.com

maximumPoolSize 線程池中的最大線程數量

maximumPoolSize >= corePoolSize,maximumPoolSize>0hBp28資訊網——每日最新資訊28at.com

  • 若當前線程池中線程數 < corePoolSize,則每來一個任務就創建一個線程去執行。
  • 若當前線程池中線程數 >= corePoolSize,會嘗試將任務添加到任務隊列。如果添加成功,則任務會等待空閑線程將其取出并執行(針對的是有界隊列)。
  • 若隊列已滿,且當前線程池中線程數 < maximumPoolSize,創建新的線程。
  • 若當前線程池中線程數 >= maximumPoolSize,則會采用拒絕策略。

keepAliveTime 空閑線程存活時間

當線程池線程數量超過corePoolSize時,多余的空閑線程會在多長時間內被銷毀。hBp28資訊網——每日最新資訊28at.com

銷毀的線程數=maximumPoolSize(最大線程數)-corePoolSize(核心線程數)。hBp28資訊網——每日最新資訊28at.com

TimeUnit 時間單位

空閑線程存活時間的描述單位,有以下選項:hBp28資訊網——每日最新資訊28at.com

  • TimeUnit.DAYS:天
  • TimeUnit.HOURS:小時
  • TimeUnit.MINUTES:分
  • TimeUnit.SECONDS:秒
  • TimeUnit.MILLISECONDS:毫秒
  • TimeUnit.MICROSECONDS:微妙
  • TimeUnit.NANOSECONDS:納秒

BlockingQueue

提交但未執行的任務隊列,有以下選項:hBp28資訊網——每日最新資訊28at.com

  • LinkedBlockingQueue:用鏈表實現的隊列,可以是有界的,也可以是無界的,但在Executors中默認使用無界的。當有新的任務來到時,若系統的線程數小于corePoolSize,線程池會創建新的線程執行任務, 當系統的線程數量等于corePoolSize后,因為是無界的任務隊列,總是能成功將任務添加到任務隊列中,所以線程數量不再增加。若任務創建的速度遠大于任務處理的速度,無界隊列會快速增長,直到內存耗盡。
  • SynchronousQueue:一個不存儲元素的阻塞隊列,SynchronousQueue沒有容量,所以實際上提交的任務不會被添加到任務隊列,總是將新任務提交給線程執行,如果沒有空閑的線程,則嘗試創建新的線程,如果線程數量已經達到最大值(maximumPoolSize),則執行拒絕策略。
  • ArrayBlockingQueue:一個由數組結構組成的有界阻塞隊列。
  • PriorityBlockingQueue:一個支持優先級排序的無界阻塞隊列。
  • DelayQueue:一個使用優先級隊列實現的無界阻塞隊列,只有在延遲期滿時才能從中提取元素。
  • LinkedTransferQueue:一個由鏈表結構組成的無界阻塞隊列。與SynchronousQueue類似,還含有非阻塞方法。
  • LinkedBlockingDeque:一個由鏈表結構組成的雙向阻塞隊列。

ThreadFactory 創建線程的工廠

線程池創建線程時調用的工廠方法,通過此方法可以設置線程的優先級、線程命名規則以及線程類型(用戶線程還是守護線程)等。一般情況下使用默認的,即Executors類的靜態方法defaultThreadFactory(),也可以自定義。hBp28資訊網——每日最新資訊28at.com

import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class Test {    public static void main(String[] args) {        // 創建線程工廠        ThreadFactory threadFactory = new ThreadFactory() {            @Override            public Thread newThread(Runnable runnable) {                // 創建線程池中的線程                Thread thread = new Thread(runnable);                // 設置線程名稱                thread.setName("Thread-" + runnable.hashCode());                // 設置線程優先級(最大值:10)                thread.setPriority(Thread.MAX_PRIORITY);                //......                return thread;            }        };        // 創建線程池        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(                5,                10,                0L,                TimeUnit.MILLISECONDS,                new LinkedBlockingQueue<Runnable>(10),                threadFactory        );        try{            threadPoolExecutor.submit(new Runnable() {                @Override                public void run() {                    Thread thread = Thread.currentThread();                    System.out.println(String.format("線程:%s,線程優先級:%d",thread.getName(), thread.getPriority()));                }            });        }catch (Exception e) {        } finally {            threadPoolExecutor.shutdown();        }    }}

hBp28資訊網——每日最新資訊28at.com

Executors.defaultThreadFactory()hBp28資訊網——每日最新資訊28at.com

RejectedExecutionHandler

拒絕策略。當線程池的任務超出線程池隊列可以存儲的最大值之后,執行的策略。hBp28資訊網——每日最新資訊28at.com

  • AbortPolicy策略:直接拋出異常,阻止系統正常工作。(線程池的默認策略)。
  • DiscardOldestPolicy策略:丟棄任務隊列中最早添加的任務,并嘗試提交當前任務。
  • CallerRunsPolicy策略:調用主線程執行被拒絕的任務,這提供了一種簡單的反饋控制機制,將降低新任務的提交速度。
  • DiscardPolicy策略:忽略并拋棄當前任務。

hBp28資訊網——每日最新資訊28at.com

new一個線程池hBp28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-13521-0.html程序員必會之最詳細的ThreadPoolExecutor 線程池七大參數含義

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

上一篇: Spring事務超時到底是怎么回事?

下一篇: C# Dev Kit for Visual Studio Code 用法詳解

標簽:
  • 熱門焦點
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • 自動化在DevOps中的力量:簡化軟件開發和交付

    自動化在DevOps中扮演著重要角色,它提升了DevOps的效能。通過自動化工具和方法,DevOps團隊可以實現以下目標:消除手動和重復性任務。簡化流程。在整個軟件開發生命周期中實現更
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 共享單車的故事講到哪了?

    來源丨海克財經與共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • AMD的AI芯片轉單給三星可能性不大 與臺積電已合作至2nm制程

    據 DIGITIMES 消息,英偉達 AI GPU 出貨逐季飆升,接下來 AMD MI 300 系列將在第 4 季底量產。而半導體業內人士表示,近日傳出 AMD 的 AI 芯片將轉單給
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
  • OPPO Reno10 Pro英雄聯盟定制禮盒公布:薩勒芬妮同款配色夢幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新機,全系標配了超光影長焦鏡頭,是迄今為止拍照
Top 主站蜘蛛池模板: 古丈县| 芦溪县| 新宁县| 东乡| 长治市| 黔江区| 什邡市| 台东市| 宁蒗| 和平区| 肥乡县| 和林格尔县| 昭平县| 平邑县| 嘉定区| 阜平县| 福清市| 柳州市| 宁海县| 陕西省| 大田县| 桂东县| 睢宁县| 涪陵区| 永和县| 古田县| 望城县| 新源县| 芷江| 岳西县| 泌阳县| 吐鲁番市| 家居| 定结县| 井研县| 汤原县| 乌什县| 博罗县| 汝州市| 湖州市| 伽师县|