Java ScheduledThreadPoolExecutor确定需要多少线程

时间:2015-06-22 20:06:56

标签: java multithreading

所有可用的ScheduledThreadPoolExecutor构造函数都需要corePoolsize参数。但我不确定我真的需要多少?

我计划在一个类中使用它,其中一个实例只使用1个计划任务。因此将池大小设置为除1之外的其他任何内容都是没有意义的吗?或者我应该创建一个静态ScheduledThreadPoolExecutor实例,以便在我自己的类的所有实例之间共享?

2 个答案:

答案 0 :(得分:1)

如果您只计划为每个类的实例安排一个任务,则不需要在池中使用多个线程。即使您使用scheduleAtFixedRate,如果您只安排一个任务,它也不会同时运行,即使它运行的时间长于其周期。因此,如果您只安排一个任务,则只需要一个线程。

如果在程序中有意义,那么创建执行程序的共享实例可能是个好主意。当不必为每个实例创建执行程序和线程时,您将获得更好的性能。但是,您必须注意将corePoolSize设置为至少预期的最大并发任务数。否则任务可能会延迟。

答案 1 :(得分:-1)

最好使用程序运行的机器上可用的内核数量作为此参数的值。

示例:

int cores = Runtime.getRuntime().availableProcessors();