如何使用ExecutorService的方式爲應用程序級別的應用程序創建一箇中央線程池,該線程池的池大小將根據當時CPU可用的線程數設置,然後不同的時間應用程序的功能按照他們的要求使用來自該中央池的線程。Java ExecutorService
回答
從Java 8開始,我建議你使用ForkJoinPool.commonPool()
。這是Java提供的唯一全局線程池。
在Java 8之前,您要麼保留自己的線程池,要麼使用您的框架的可共享線程池。
貝婁是我的看法:
中央線程池?
也許吧,說的Singleton Pattern在設計模式,我認爲它可以解決你的問題;
根據可用CPU的線程數設置?
線程池的大小不準確。實際上,大小取決於線程池執行的任務類型。例如,大小可以
Runtime.getRuntime().availableProcessors() + 1
如果任務CPU密集型,或者是Runtime.getRuntime().availableProcessors() * 2
如果任務I/O密集型。但這些都只是基本原則,你應該確定合適的尺寸用一些測試應用程序準則(如Little's_law);我的建議:
在實踐中,我很少提交所有任務只有一箇中心threal池,也許應該組的任務按類型,並將其提交給不同的線程池,這將是方便的監控或稍後調整線程池。
希望能幫到你。
謝謝Haolin!當找到當前的JVM線程數時也有問題: - 需要查找標準閾值 快樂案例:如果JVM線程數小於閾值,那麼我們將從線程池中獲取線程並處理它。這種情況下沒有問題 悲傷情況:如果JVM線程數大於閾值,那麼該怎麼辦? 所以我們需要等到jvm線程冷卻下來。如果我們在等待線程,則CPU利用率太高。如果我們繼續等待,那麼記錄過程就會積累起來,並且這將成爲性能方面的問題。 – Man
- 1. Java ExecutorService - 縮放
- 2. Java ExecutorService invokeAll()中斷
- 3. 的ExecutorService中的Java Servlet
- 4. Java中ExecutorService的性能
- 5. 睡一個ExecutorService(Java/Clojure的)
- 6. Java定時器與ExecutorService?
- 7. ExecutorService停止並等待另一個ExecutorService在Java中完成
- 8. Java - ExecutorService具有最大大小
- 9. 線程終止時的Java ExecutorService回調
- 10. java ExecutorService如何處理超時
- 11. Java ExecutorService無限循環作業
- 12. Executorservice如何在java中工作?
- 13. Jconsole活動線程數和java ExecutorService
- 14. Java ExecutorService暫停/恢復特定線程
- 15. Java的ExecutorService的堆空間問題
- 16. static ExecutorService
- 17. ListenableFutureTask/ExecutorService
- 18. ExecutorService JProgressBar
- 19. 的ExecutorService和ForkJoinPool
- 20. ExecutorService,newFixedThreadPool和setPrioirty
- 21. ExecutorService關閉 - Kafka
- 22. ExecutorService vs Casual Thread Spawner
- 23. 塊,直到ExecutorService的完成
- 24. 從(ExecutorService)捕獲異常CachedThreadPool
- 25. CancellationException當使用ExecutorService
- 26. 轉換爲ExecutorService的
- 27. FJTask vs Future + Callables + ExecutorService
- 28. ExecutorService添加延遲
- 29. ExecutorService的奇怪行爲
- 30. 選擇的ExecutorService的提交和ExecutorService的的執行
圍繞'ExecutorService'使用一些自定義的包裝,這是一個單例(使用依賴注入也許)? – 2016-11-24 05:42:40
您可以使用'Runtime.getRuntime()。availableProcessors();'來獲得處理器的數量,但我不會推薦使用這個。更好地分析代碼以找到最佳線程數。 –
如果你正在尋找一種方法來計算你的環境可以支持多少線程..這裏是一些..http://stackoverflow.com/questions/763579/how-many-threads-can-a-java-vm-支持 – Sagar