首頁  >  文章  >  Java  >  Java線程池參數的意思是什麼

Java線程池參數的意思是什麼

PHPz
PHPz轉載
2023-05-06 09:22:141111瀏覽

java多執行緒開發時,常常用到執行緒池技術,這篇文章是對建立java執行緒池時的七個參數的詳細解釋。

Java線程池參數的意思是什麼

從原始碼可以看出,執行緒池的建構子有7個參數

這7 個參數分別是:

  • #corePoolSize:核心執行緒數。

  • maximumPoolSize:最大執行緒數。

  • keepAliveTime:空閒執行緒存活時間。

  • TimeUnit:時間單位。

  • BlockingQueue:執行緒池任務佇列。

  • ThreadFactory:建立執行緒的工廠。

  • RejectedExecutionHandler:拒絕策略。

下面會對這7個參數一一解釋。

一、corePoolSize 執行緒池核心執行緒大小

執行緒池中會維護一個最小的執行緒數量,即使這些執行緒處理空閒狀態,他們也不會被銷毀,除非設定了allowCoreThreadTimeOut。這裡的最小執行緒數量即是corePoolSize。

二、maximumPoolSize 線程池最大線程數量

一個任務被提交到線程池以後,首先會找有沒有空閒存活線程,如果有則直接將任務交給這個空閒線程來執行,如果沒有則會快取到工作佇列(後面會介紹)中,如果工作佇列滿了,才會建立一個新線程,然後從工作佇列的頭部取出一個任務交由新執行緒來處理,而將剛提交的任務放入工作隊列尾部。線程池不會無限制的去創建新線程,它會有一個最大線程數量的限制,這個數量即由maximunPoolSize指定。

三、keepAliveTime 空閒執行緒存活時間

一個執行緒如果處於空閒狀態,且目前的執行緒數大於corePoolSize,那麼在指定時間後,這個空閒執行緒會被銷毀,這裡的指定時間由keepAliveTime來設定

四、unit 空閒執行緒存活時間單位

keepAliveTime的計量單位

五、workQueue 工作佇列

新任務被提交後,會先進入此工作隊列中,任務調度時再從隊列中取出任務。 jdk中提供了四個工作隊列:

①ArrayBlockingQueue

基於陣列的有界阻塞隊列,按FIFO排序。新任務進來後,會放到該佇列的隊尾,有界的陣列可以防止資源耗盡問題。當執行緒池中執行緒數達到corePoolSize後,再有新任務進來,則會將任務放入該佇列的隊尾,等待被調度。如果佇列已經是滿的,則建立一個新線程,如果線程數量已經達到maxPoolSize,則會執行拒絕策略。

②LinkedBlockingQuene

基於鍊錶的無界阻塞佇列(其實最大容量為Interger.MAX),依照FIFO排序。由於該佇列的近似無界性,當執行緒池中執行緒數量達到corePoolSize後,再有新任務進來,會一直存入該佇列,而不會去建立新執行緒直到maxPoolSize,因此使用該工作佇列時,參數maxPoolSize其實是不起作用的。

③SynchronousQuene

一個不緩存任務的阻塞佇列,生產者放入一個任務必須等到消費者取出這個任務。也就是說新任務進來時,不會緩存,而是直接被調度執行該任務,如果沒有可用線程,則創建新線程,如果線程數量達到maxPoolSize,則執行拒絕策略。

④PriorityBlockingQueue

有優先權的無界阻塞佇列,優先權透過參數Comparator實作。

六、threadFactory 執行緒工廠

建立一個新執行緒時使用的工廠,可以用來設定執行緒名、是否為daemon執行緒等等

#七、handler 拒絕策略

當工作佇列中的任務已到達最大限制,且執行緒池中的執行緒數量也達到最大限制,這時如果有新任務提交進來,該如何處理呢。這裡的拒絕策略,就是解決這個問題的,jdk中提供了4中拒絕策略:

①CallerRunsPolicy

該策略下,在呼叫者執行緒中直接執行被拒絕任務的run方法,除非執行緒池已經shutdown,則直接拋棄任務。

Java線程池參數的意思是什麼

②AbortPolicy

該策略下,直接丟棄任務,並拋出RejectedExecutionException例外。

Java線程池參數的意思是什麼

③DiscardPolicy

該策略下,直接丟棄任務,什麼都不做。

Java線程池參數的意思是什麼

④DiscardOldestPolicy

#該策略下,拋棄進入佇列最早的那個任務,然後試著把這次拒絕的任務放入佇列

Java線程池參數的意思是什麼

以上是Java線程池參數的意思是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除