这篇文章主要介绍了springBoot @Scheduled实现多个任务同时开始执行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
@Scheduled 多个定时任务同时执行
1、定时任务是单线程运行的
定时任务是单线程执行的,默认一个时间段只能执行一个定时任务
如果多个定时任务同时执行的话,那么会按照顺序执行
2、多线程开启定时任务
创建线程池,且注入到spring 中,
@EnableScheduling 定时任务扫描,开始定时任务计划支持
@Service
@Component
@EnableScheduling
public class SendMsgNoticeServiceTimer {
private static final Logger logger = LoggerFactory.getLogger(SendMsgNoticeServiceTimer.class);
@Autowired
private NySendMsg nySendMsg;
//创建定时任务线程池
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(64);
return taskScheduler;
}
@Scheduled(cron="0 0 10 * * ?")
public void sendPaymentNotice() {
logger.info("***-sendPaymentNotice--定时任务每天凌晨10点执行一次---***");
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
String endDate = sf.format(new Date());
JSONObject obj = sendTradingFeeChoosed(String.valueOf(1));
logger.info("***---定时任务" + endDate + ":系统自动发送" + obj.size() + "条短信提醒---***");
}
@Scheduled(cron="0 0 10 * * ?")
public void sendLateRemind() {
logger.info("***--sendLateRemind---定时任务每天凌晨10点执行一次---***");
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
String endDate = sf.format(new Date());
JSONObject obj = sendTradingFeeChoosed(String.valueOf(2));
logger.info("***---定时任务" + endDate + ":系统自动发送" + obj.size() + "条短信提醒---***");
}
}