所有可用的ScheduledThreadPoolExecutor构造函数都需要corePoolsize
参数。但我不确定我真的需要多少?
我计划在一个类中使用它,其中一个实例只使用1个计划任务。因此将池大小设置为除1之外的其他任何内容都是没有意义的吗?或者我应该创建一个静态ScheduledThreadPoolExecutor实例,以便在我自己的类的所有实例之间共享?
答案 0 :(得分:1)
如果您只计划为每个类的实例安排一个任务,则不需要在池中使用多个线程。即使您使用scheduleAtFixedRate,如果您只安排一个任务,它也不会同时运行,即使它运行的时间长于其周期。因此,如果您只安排一个任务,则只需要一个线程。
如果在程序中有意义,那么创建执行程序的共享实例可能是个好主意。当不必为每个实例创建执行程序和线程时,您将获得更好的性能。但是,您必须注意将corePoolSize
设置为至少预期的最大并发任务数。否则任务可能会延迟。
答案 1 :(得分:-1)
最好使用程序运行的机器上可用的内核数量作为此参数的值。
示例:
int cores = Runtime.getRuntime().availableProcessors();