考虑一个假设的情况,其中多个任务将以固定速率永久运行。只要应用程序运行,这些任务的数量就不会改变。对于这种情况,像这样创建一个包含n个任务的线程池有什么区别
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(n);
for (int i = 0; i < n; i++) {
executorService.scheduleAtFixedRate(job, 0, 5, TimeUnit.MINUTES);
}
并为每个任务创建单个执行器,如下所示?
for (int i = 0; i < n; i++) {
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(job, 0, 5, TimeUnit.MINUTES);
}
如果有任何差异,应该首选哪一个,为什么?
注意:除了创建多个执行器实例
最佳答案
执行器旨在处理线程池。因此,您不需要使用单个线程创建 N 个执行器,因为最终会得到 N 个执行器实例和 N 个线程。只需持有一个处理 N 个线程的 Executor,您就可以通过 1 个执行器和 N 个线程节省一些内存。
关于java - 多个 ScheduledExecutorServices 或一个具有用于固定速率任务的线程池的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60098481/