Java知識點記錄-ThreadPoolExecutor參數說明

ThreadPoolExecutor的構造函數之一,幾個參數的含義

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler)
ThreadPoolExecutor是用來創建包含一個或多個線程來執行一系列任務用的。
用戶只需要指定好參數創建ThreadPoolExecutor,然後在把需處理的任務(包裝成Runnable或Callable對象),提交給這個Executor來執行(通過調用excute或submit方法)。

corePoolSize:  指定核心線程數。所謂的核心線程,其實就是這個Executor裏面的一個普通線程。只是按照ThreadPoolExecutor的機制,如果當前ThreadPoolExecutor中的線程數量小於這個corePoolSize,就會創建一個新線程執行新提交的任務,哪怕ThreadPoolExecutor中其他的線程啥都沒幹。
maximumPoolSize:  這個也跟ThreadPoolExecutor中活躍的線程數量有關。
    (1)如果ThreadPoolExecutor中線程的數量已經達到或大於corePoolSize了,而且workQueue已經滿了,那就新創建一個線程;
    (2)如果workQueue沒有滿,就只是把新提交的任務添加到workQueue裏面等待執行;
    (3)如果workQueue滿了,線程數量也達到maximumPoolSize,再提交任務,默認就會拋出RejectedExecutionException異常;
    (4)maximumPoolSize必須大於或等於corePoolSize。
keepAliveTime:  指定pool中數量超過corePoolSize的線程,能空閒多長時間。超過這個時間了,線程就會被終止。
    (1)這個參數必須大於或等於0。
    (2)如果allowCoreThreadTimeOut爲true,則keepAliveTime必須大於0,核心線程空閒時間超過keepAliveTime,也會被終止;否則核心線程會一直存活着。
    (3)unit指定了keepAliveTime的單位。
workQueue:  任務隊列。參加maximumPoolSize感受一下這個參數與創建新線程的關係。
其他的參數暫且不說。

說明:
(1) corePoolSize和maximumPoolSize參數,指定了ThreadPoolExecutor中活躍線程的下限和上限;
(2)keepAliveTime太小,空閒線程的存活時間比較短,需要考慮線程反覆創建的代價;
(3)workQueue如果是無界的,就要考慮提交的任務不能太多。否則都塞到這個隊列裏面不處理,就會內存溢出啥的;
(4)創建線程池,方便起見,可以用Executors.newXXX來創建。但要注意,這些方法創建的ThreadExecutor,workQueue都是無界的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章