如何使用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和ThreadPoolExecutor
- 3. Java ExecutorService invokeAll()中断
- 4. Java中ExecutorService的性能
- 5. Java:需要同步ExecutorService?
- 6. java单元测试ExecutorService
- 7. 的ExecutorService中的Java Servlet
- 8. Java定时器与ExecutorService?
- 9. ExecutorService和For循环JAVA
- 10. 睡一个ExecutorService(Java/Clojure的)
- 11. ExecutorService停止并等待另一个ExecutorService在Java中完成
- 12. Java - 带ExecutorService的多线程爬虫
- 13. 春ThreadPoolTaskExecutor类和Java的ExecutorService cachedthreadpool
- 14. Java ExecutorService无限循环作业
- 15. Java ExecutorService暂停/恢复特定线程
- 16. Java - ExecutorService具有最大大小
- 17. 无法停止java中的ExecutorService
- 18. 打开一个ExecutorService在Java中
- 19. Jboss的Java EE容器和ExecutorService的
- 20. java ExecutorService如何处理超时
- 21. Jconsole活动线程数和java ExecutorService
- 22. 线程终止时的Java ExecutorService回调
- 23. Java ExecutorService关闭现在需要时代
- 24. 的ExecutorService的invokeAll有()和未来在Java
- 25. Java并发性问题线程vs executorservice
- 26. 使用ExecutorService执行Java关闭钩子
- 27. Executorservice如何在java中工作?
- 28. Java的ExecutorService的堆空间问题
- 29. static ExecutorService
- 30. ListenableFutureTask/ExecutorService
围绕'ExecutorService'使用一些自定义的包装,这是一个单例(使用依赖注入也许)? – 2016-11-24 05:42:40
您可以使用'Runtime.getRuntime()。availableProcessors();'来获得处理器的数量,但我不会推荐使用这个。更好地分析代码以找到最佳线程数。 –
如果你正在寻找一种方法来计算你的环境可以支持多少线程..这里是一些..http://stackoverflow.com/questions/763579/how-many-threads-can-a-java-vm-支持 – Sagar