资源贴:https://blog.csdn.net/u013456370/article/details/79411952
1)@Scheduled 单个方法内部单线程执行,不会存在前一个定时任务没完成,开启后一个定时任务的情况
例如:方法a,a的第一遍执行中途卡主了,即使a的定时时间到了a也不会再次执行,串行
2)@Scheduled
2.1)默认所有的@Scheduled方法由单线程调度,没有同时执行的任务
例如:方法a和b,a的执行卡住了,即使时间到了b也不会执行,也是串行
2.2)配置多线程任务调度
package com.gd.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import java.util.concurrent.Executors;
/**
* 多线程执行定时任务
*/
//@Configuration
//所有的定时任务都放在一个线程池中,定时任务启动时使用不同都线程。
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//设定一个长度10的定时任务线程池
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
}
}
例如:方法a和b可以同时执行,但是方法a的前一次任务和后一次任务串行