成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試突擊:說一下線程池七個參數的含義?

開發 前端
線程池創建線程時調用的工廠方法,通過此方法可以設置線程的優先級、線程命名規則以及線程類型(用戶線程還是守護線程)等。

所謂的線程池的 7 大參數是指,在使用 ThreadPoolExecutor 創建線程池時所設置的 7 個參數,如以下源碼所示:

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

這 7 個參數分別是:

  1. corePoolSize:核心線程數。
  2. maximumPoolSize:最大線程數。
  3. keepAliveTime:空閑線程存活時間。
  4. TimeUnit:時間單位。
  5. BlockingQueue:線程池任務隊列。
  6. ThreadFactory:創建線程的工廠。
  7. RejectedExecutionHandler:拒絕策略。

參數1:corePoolSize核

心線程數:是指線程池中長期存活的線程數。

這就好比古代大戶人家,會長期雇傭一些“長工”來給他們干活,這些人一般比較穩定,無論這一年的活多活少,這些人都不會被辭退,都是長期生活在大戶人家的。

參數2:maximumPoolSize

最大線程數:線程池允許創建的最大線程數量,當線程池的任務隊列滿了之后,可以創建的最大線程數。

這是古代大戶人家最多可以雇傭的人數,比如某個節日或大戶人家有人過壽時,因為活太多,僅靠“長工”是完不成任務,這時就會再招聘一些“短工”一起來干活,這個最大線程數就是“長工”+“短工”的總人數,也就是招聘的人數不能超過 maximumPoolSize。

注意事項

最大線程數 maximumPoolSize 的值不能小于核心線程數 corePoolSize,否則在程序運行時會報 IllegalArgumentException 非法參數異常,如下圖所示:

參數3:keepAliveTime

空閑線程存活時間,當線程池中沒有任務時,會銷毀一些線程,銷毀的線程數=maximumPoolSize(最大線程數)-corePoolSize(核心線程數)。

還是以大戶人家為例,當大戶人家比較忙的時候就會雇傭一些“短工”來干活,但等干完活之后,不忙了,就會將這些“短工”辭退掉,而 keepAliveTime 就是用來描述沒活之后,短工可以在大戶人家待的(最長)時間。

參數4:TimeUnit

時間單位:空閑線程存活時間的描述單位,此參數是配合參數 3 使用的。參數 3 是一個 long 類型的值,比如參數 3 傳遞的是 1,那么這個 1 表示的是 1 天?還是 1 小時?還是 1 秒鐘?是由參數 4 說了算的。TimeUnit 有以下 7 個值:

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

參數5:BlockingQueue

阻塞隊列:線程池存放任務的隊列,用來存儲線程池的所有待執行任務。它可以設置以下幾個值:

  • ArrayBlockingQueue:一個由數組結構組成的有界阻塞隊列。
  • LinkedBlockingQueue:一個由鏈表結構組成的有界阻塞隊列。
  • SynchronousQueue:一個不存儲元素的阻塞隊列,即直接提交給線程不保持它們。
  • PriorityBlockingQueue:一個支持優先級排序的無界阻塞隊列。
  • DelayQueue:一個使用優先級隊列實現的無界阻塞隊列,只有在延遲期滿時才能從中提取元素。
  • LinkedTransferQueue:一個由鏈表結構組成的無界阻塞隊列。與SynchronousQueue類似,還含有非阻塞方法。
  • LinkedBlockingDeque:一個由鏈表結構組成的雙向阻塞隊列。

比較常用的是 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:拒絕并拋出異常。
  • CallerRunsPolicy:使用當前調用的線程來執行此任務。
  • DiscardOldestPolicy:拋棄隊列頭部(最舊)的一個任務,并執行當前任務。
  • DiscardPolicy:忽略并拋棄當前任務。

線程池的默認策略是 AbortPolicy 拒絕并拋出異常。

總結

本文介紹了線程池的 7 大參數:

  1. corePoolSize:核心線程數,線程池正常情況下保持的線程數,大戶人家“長工”的數量。
  2. maximumPoolSize:最大線程數,當線程池繁忙時最多可以擁有的線程數,大戶人家“長工”+“短工”的總數量。
  3. keepAliveTime:空閑線程存活時間,沒有活之后“短工”可以生存的最大時間。
  4. TimeUnit:時間單位,配合參數 3 一起使用,用于描述參數 3 的時間單位。
  5. BlockingQueue:線程池的任務隊列,用于保存線程池待執行任務的容器。
  6. ThreadFactory:線程工廠,用于創建線程池中線程的工廠方法,通過它可以設置線程的命名規則、優先級和線程類型。
  7. RejectedExecutionHandler:拒絕策略,當任務量超過線程池可以保存的最大任務數時,執行的策略。
責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2023-11-29 16:38:12

線程池阻塞隊列開發

2022-02-17 08:02:08

線程Java生命周期

2022-06-06 15:33:20

線程Java釋放鎖

2022-06-29 11:01:05

MySQL事務隔離級別

2022-09-27 21:14:54

Spring事務傳播機制

2021-06-02 11:25:18

線程池Java代碼

2022-09-05 07:06:59

BeanSpring

2022-05-18 07:43:09

Exchange交換器JUC

2022-01-13 06:59:40

HashMap底層面試

2022-07-20 07:29:55

TCPIP協議

2011-08-09 15:25:14

線程池數據庫連接池

2023-10-18 08:04:15

taskworker任務

2023-07-14 14:53:38

人工智能prompt

2022-07-28 11:33:23

數據分析經驗

2021-07-28 10:08:19

類加載代碼塊面試

2023-02-06 07:01:51

2023-09-12 14:56:13

MyBatis緩存機制

2022-03-21 07:40:08

線程池Executors方式

2022-03-02 07:36:37

池化技術Java線程池

2023-02-18 13:34:14

Nacos健康檢查機制
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.成人.com| 久久精品免费观看 | 国产综合精品一区二区三区 | 国产日韩欧美激情 | 99久久婷婷国产综合精品电影 | 91精品久久久久久久 | 中文字幕成人av | 欧美精品综合在线 | 色爽女 | 成人亚洲在线 | 久久久亚洲 | 91视频88av | 四虎影院在线观看av | 精品国产91 | 日批日韩在线观看 | 精品一区二区三区免费毛片 | 二区欧美 | 一级毛片色一级 | 亚洲第一区久久 | av网站免费在线观看 | 免费看大片bbbb欧美 | 欧美九九九| 干一干操一操 | 久久夜视频 | 日韩视频一区二区 | 国产色网 | 999精品网 | 啪一啪在线视频 | 精品国产免费一区二区三区演员表 | 青青草社区 | 精品国产伦一区二区三区观看体验 | 91不卡 | 国产美女精品视频免费观看 | 免费看国产一级特黄aaaa大片 | 欧美中文在线 | 91视频网址 | 国产精品中文字幕在线 | av夜夜操 | 一级爱爱片 | 青青草在线播放 | 国产精品欧美一区二区三区不卡 |