發布時間:2024-01-24閱讀(14)
所謂的線程池的 7 大參數是指,在使用 ThreadPoolExecutor 創建線程池時所設置的 7 個參數,如以下源碼所示:
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory ThreadFactory, RejectedExecutionHandler handler) { //...}
這 7 個參數分別是:
核心線程數:是指線程池中長期存活的線程數。
這就好比古代大戶人家,會長期雇傭一些“長工”來給他們干活,這些人一般比較穩定,無論這一年的活多活少,這些人都不會被辭退,都是長期生活在大戶人家的。
參數2:maximumPoolSize最大線程數:線程池允許創建的最大線程數量,當線程池的任務隊列滿了之后,可以創建的最大線程數。
這是古代大戶人家最多可以雇傭的人數,比如某個節日或大戶人家有人過壽時,因為活太多,僅靠“長工”是完不成任務,這時就會再招聘一些“短工”一起來干活,這個最大線程數就是“長工” “短工”的總人數,也就是招聘的人數不能超過 maximumPoolSize。
注意事項最大線程數 maximumPoolSize 的值不能小于核心線程數 corePoolSize,否則在程序運行時會報 IllegalArgumentException 非法參數異常,如下圖所示:

空閑線程存活時間,當線程池中沒有任務時,會銷毀一些線程,銷毀的線程數=maximumPoolSize(最大線程數)-corePoolSize(核心線程數)。
還是以大戶人家為例,當大戶人家比較忙的時候就會雇傭一些“短工”來干活,但等干完活之后,不忙了,就會將這些“短工”辭退掉,而 keepAliveTime 就是用來描述沒活之后,短工可以在大戶人家待的(最長)時間。
參數4:TimeUnit時間單位:空閑線程存活時間的描述單位,此參數是配合參數 3 使用的。
參數 3 是一個 long 類型的值,比如參數 3 傳遞的是 1,那么這個 1 表示的是 1 天?還是 1 小時?還是 1 秒鐘?是由參數 4 說了算的。
TimeUnit 有以下 7 個值:
阻塞隊列:線程池存放任務的隊列,用來存儲線程池的所有待執行任務。
它可以設置以下幾個值:
比較常用的是 LinkedBlockingQueue,線程池的排隊策略和 BlockingQueue 息息相關。
參數6:ThreadFactory線程工廠:線程池創建線程時調用的工廠方法,通過此方法可以設置線程的優先級、線程命名規則以及線程類型(用戶線程還是守護線程)等。
線程工廠的使用示例如下:
public static void main(String[] args) { // 創建線程工廠 ThreadFactory threadFactory = new ThreadFactory() { @Override public Thread newThread(Runnable r) { // 創建線程池中的線程 Thread thread = new Thread(r); // 設置線程名稱 thread.setName("Thread-" r.hashCode()); // 設置線程優先級(最大值:10) thread.setPriority(Thread.MAX_PRIORITY); //...... return thread; } }; // 創建線程池 ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), threadFactory); // 使用自定義的線程工廠 threadPoolExecutor.submit(new Runnable() { @Override public void run() { Thread thread = Thread.currentThread(); System.out.println(String.format("線程:%s,線程優先級:%d", thread.getName(), thread.getPriority())); } });}
以上程序的執行結果如下:

從上述執行結果可以看出,自定義線程工廠起作用了,線程的名稱和線程的優先級都是通過線程工廠設置的。
參數7:RejectedExecutionHandler拒絕策略:當線程池的任務超出線程池隊列可以存儲的最大值之后,執行的策略。
默認的拒絕策略有以下 4 種:
線程池的默認策略是 AbortPolicy 拒絕并拋出異常。
總結本文介紹了線程池的 7 大參數:
歡迎分享轉載→http://m.avcorse.com/read-256303.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖