[英]Java Thread Pools/Executor Service and wait()s - what happens to the threads & task queue?
[英]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
更改為1
或3
,這有什么區別嗎? 我嘗試了卻幾乎一無所獲。 任何人都可以解釋線程池計數的實際使用嗎? 也許我的任務很輕巧?
那就是corePoolSize是池中的數字線程。可用的線程選擇合格的任務並在同一線程中運行。如果沒有可用的線程但任務合格,則不會執行,因為所有線程都在忙。為了進行演示,請創建一個corepool大小為1並提交長時間運行的任務,然后提交一個輕量級的任務,然后檢查行為,然后將corepoolsize增大為2並查看行為。
您需要了解,要創建多少線程都沒有關系,最終,線程將根據可用核心的數量執行。 現在,根據文檔 ,它是“即使處於空閑狀態也要保留在池中的線程數”。
你能告訴我線程池計數的真正用途是什么
executor = Executors.newScheduledThreadPool(2);
上面的代碼行將在線程池中創建2
線程,但這並不意味着所有人都會做一些工作。 但是,同一時間,同一線程可用於執行已提交的線程池中的其他任務。
因此,最好在選擇要創建的線程總數之前先了解您的要求。 (我通常更喜歡這個數字,具體取決於可用內核數)
這取決於運行應用程序的計算機的CPU內核數。 如果您有更多的CPU內核,則如果您的應用程序不是IO Bound應用程序,則可以並行運行多個線程,並且可以提高整個系統的性能。
與CPU綁定的應用程序將受益於更多的內核和線程。
如果您具有4核CPU,則可以將值配置為4。如果您的計算機具有單CPU核,則將池大小更改為4不會有任何好處。
相關的SE問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.