Java 执行器服务

Java ExecutorService

如何以在应用程序级别为应用程序创建中央线程池的方式使用 ExecutorService,其池大小将根据当时 CPU 可用的线程数设置然后应用程序的不同功能根据他们的要求使用来自这个中央池的线程。

从Java8开始,我建议你使用ForkJoinPool.commonPool()。这是 base Java 提供的唯一全局线程池。

在 Java8 之前,您要么保留自己的线程池,要么使用框架的可共享线程池。

以下是我的观点:

  • 中央线程池?

    也许吧,据说设计模式中的Singleton Pattern,我觉得可以解决你的问题;

  • 根据可用线程数设置 CPU?

    线程池的大小不准确。实际上,大小取决于线程池执行的任务类型。例如,如果任务是 CPU 密集型 ,则大小可以是 Runtime.getRuntime().availableProcessors() + 1,如果任务是 [,则大小可以是 Runtime.getRuntime().availableProcessors() * 2 =44=] intensive。但这些只是基本原则,您应该根据一些准则(例如 Little's_law)测试您的应用程序来确定合适的大小;

  • 我的建议:

    在实践中,我很少将所有任务提交到一个中央线程池,也许应该按类型对任务进行分组,将它们提交到不同的线程池,这将方便以后监控或调整线程池。

希望能帮到你。