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

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

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

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

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

線程池的 7 大參數整理。SBY28資訊網——每日最新資訊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。SBY28資訊網——每日最新資訊28at.com

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

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

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

keepAliveTime 空閑線程存活時間

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

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

TimeUnit 時間單位

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

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

BlockingQueue

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

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

ThreadFactory 創建線程的工廠

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

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

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

RejectedExecutionHandler

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 新巴尔虎左旗| 南汇区| 安化县| 黔西| 隆子县| 分宜县| 美姑县| 云龙县| 娱乐| 新竹市| 广南县| 黔西县| 福贡县| 屏东市| 华宁县| 枝江市| 晋中市| 曲松县| 平潭县| 兴山县| 荆州市| 霍州市| 遂平县| 新平| 讷河市| 宜宾市| 安义县| 芦山县| 十堰市| 和平县| 贵定县| 白山市| 怀集县| 中山市| 招远市| 金溪县| 扬中市| 武清区| 巴里| 阿鲁科尔沁旗| 淄博市|