簡體   English   中英

執行程序ScheduledThreadPool“更多”線程池的作用是什么?

[英]Executor ScheduledThreadPool What are effects of “more” thread pools?

我有一個正在實現runnable接口 的類的3個實例。 我正在實例化我的Executor類,如下所示;

 executor = Executors.newScheduledThreadPool(2);<--- talking about this part
    executor.scheduleAtFixedRate(unassignedRunnable, 0, refreshTime, TimeUnit.SECONDS);
    executor.scheduleAtFixedRate(assignedToMeRunnable, 2, refreshTime, TimeUnit.SECONDS);
    executor.scheduleAtFixedRate(createTicketsFromFile, 3, refreshTime * 2, TimeUnit.SECONDS);

我的問題是,如果我將線程池數從2更改為13 ,這有什么區別嗎? 我嘗試了卻幾乎一無所獲。 任何人都可以解釋線程池計數的實際使用嗎? 也許我的任務很輕巧?

那就是corePoolSize是池中的數字線程。可用的線程選擇合格的任務並在同一線程中運行。如果沒有可用的線程但任務合格,則不會執行,因為所有線程都在忙。為了進行演示,請創建一個corepool大小為1並提交長時間運行的任務,然后提交一個輕量級的任務,然后檢查行為,然后將corepoolsize增大為2並查看行為。

您需要了解,要創建多少線程都沒有關系,最終,線程將根據可用核心的數量執行。 現在,根據文檔 ,它是“即使處於空閑狀態也要保留在池中的線​​程數”。

你能告訴我線程池計數的真正用途是什么

executor = Executors.newScheduledThreadPool(2);

上面的代碼行將在線程池中創建2線程,但這並不意味着所有人都會做一些工作。 但是,同一時間,同一線程可用於執行已提交的線程池中的其他任務。

因此,最好在選擇要創建的線程總數之前先了解您的要求。 (我通常更喜歡這個數字,具體取決於可用內核數)

這取決於運行應用程序的計算機的CPU內核數。 如果您有更多的CPU內核,則如果您的應用程序不是IO Bound應用程序,則可以並行運行多個線程,並且可以提高整個系統的性能。

與CPU綁定的應用程序將受益於更多的內核和線程。

如果您具有4核CPU,則可以將值配置為4。如果您的計算機具有單CPU核,則將池大小更改為4不會有任何好處。

相關的SE問題:

Java:如何根據cpu內核擴展線程?

多線程比單線程快嗎?

暫無
暫無

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

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