我们有10个计划任务配置为每20秒使用以下注释运行(它们在晚上停止,因为依赖系统在早上4点重启):
@Scheduled(cron = "*/20 * 0-3,5-23 * * *")
public void pollingMethod1() {
...
}
@Scheduled(cron = "*/20 * 0-3,5-23 * * *")
public void pollingMethod2() {
...
}
...
我们有一个配置了池大小为10的线程池taks调度程序:
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {
private final int POOL_SIZE = 10;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
threadPoolTaskScheduler.setThreadNamePrefix("polling-pool-");
threadPoolTaskScheduler.initialize();
threadPoolTaskScheduler.setAwaitTerminationSeconds(120);
threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
}
}
有时在白天,其中一项任务不会执行一两个小时,然后会继续定期执行。 任务是否可能阻止其他任务?我怎样才能知道是否是这种情况?
答案 0 :(得分:0)
Suppost pollingMethod1
需要20秒以上,然后它可能会被不同的线程同时执行,这会导致其他任务被阻止。如果允许,您应该增加POOL_SIZE
。