簡體   English   中英

固定線程池和計划線程池之間的Java差異

[英]Java difference between fixed threadpool and scheduled threadpool

我有一個固定的線程池,該線程池可隨時(有一個隊列)運行7個並發線程,並且我想將其變成僅運行7個並發作業但可以排隊/調度更多的預定線程池。

閱讀文檔並沒有真正幫助我。

newFixedThreadPool

公共靜態ExecutorService newFixedThreadPool(int nThreads)

創建一個線程池,該線程池重用在共享的無邊界隊列上運行的一組固定線程。 如果在關閉之前執行過程中由於執行失敗導致任何線程終止,則在執行后續任務時將使用新線程代替。

參數:nThreads-池中的線程數返回:新創建的線程池

newScheduledThreadPool

公共靜態ScheduledExecutorService newScheduledThreadPool(int corePoolSize)

創建一個線程池,該線程池可以計划命令在給定的延遲后運行或定期執行。

參數:corePoolSize-即使處於空閑狀態也要保留在池中的線​​程數。 返回:新創建的預定線程池

我不明白的是,corePoolSize和nThreads是同一件事嗎? 預定線程池真的是固定線程池的子集,這意味着我可以將預定線程池用作可以將延遲任務排隊的固定線程池嗎?

是的,只是增加了調度功能,它們基本上是同一件事。 ScheduledThreadPoolExecutor甚至擴展了ExecutorService(ThreadPoolExecutor)的默認實現。

nThreads和corePoolSize是要產生的線程數。 對於固定的執行者,總是一樣的。 通過其他實現,它在min(corePoolSize)和max(maxPoolSize)之間變化。

是的,它在JDK5-6中可以這樣工作。 雖然原則上ScheduledExecutorService接口在池大小的問題上保持沉默,但在JDK中使用的實際實現使用固定池:

類ScheduledThreadPoolExecutor

盡管此類從ThreadPoolExecutor繼承,但是一些繼承的調整方法對此沒有用。 特別是,由於它使用corePoolSize線程和無限制隊列充當固定大小的池,因此對maximumPoolSize的調整沒有任何作用。

顯然,如果您使用應用程序框架或其他供應商提供的ScheduledExecutorService的其他實現,則可能不成立。

是的,它們在線程池大小方面完全相同:它們最終都調用相同的ThreadPoolExecutor構造函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM