@Scheduled和scheduler:pool-size具体是做什么的?

6

我希望同时运行多个定时任务。

在配置Spring实现此功能时,可以向调度程序提供线程池大小:

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<task:executor id="myExecutor" pool-size="32"/>
<task:scheduler id="myScheduler" pool-size="1000"/>

这里的“池大小”具体指什么呢?

它是指只能存储1000个已安排的方法,还是指同时只能处理1000个方法?

tldr; 如果一个被@Scheduled(fixedDelay=60)注解的方法当前没有被执行(也就是说在延迟期间),它是否会填满池呢?

1个回答

5
它指的是底层ThreadPoolExecutor一次可以汇集的线程数,即可以同时运行的方法的概括数量。 任务命名空间的文档详细介绍了您需要的大部分细节。
我认为,在大多数环境中,1000个线程可能会过多。

所以直到执行时它才被池化?当执行完成后,相应的线程将从池中移除,直到下一次执行? - chzbrgla
2
文档没有明确说明pool-size的含义,但通常它指的是任何时候存在的线程总数。其中一些可能正在忙碌,而另一些可能处于空闲状态,但所有线程都被视为在池中。 - Tom Anderson
@Tom - 你对池的工作原理是正确的,但文档非常明确:它使用ThreadPoolTaskExecutor,并将池大小传递给它。 - GaryF
1
还算公平;虽然它没有直接用大号字体展示给像我这样懒惰的人,但它确实通过ThreadPoolTaskScheduler和ThreadPoolTaskExecutor进行了指定。 - Tom Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接