前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >@Scheduled 多个定时任务同时执行

@Scheduled 多个定时任务同时执行

作者头像
猫头虎
发布2024-04-08 08:51:26
2770
发布2024-04-08 08:51:26
举报

?? 博主猫头虎 带您 Go to New World.?? ? 博客首页——猫头虎的博客? ?《面试题大全专栏》 文章图文并茂?生动形象?简单易学!欢迎大家来踩踩~? ? 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~? ? 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~?

?? 希望本文能够给您带来一定的帮助?文章粗浅,敬请批评指正!?

这篇文章主要介绍了springBoot @Scheduled实现多个任务同时开始执行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

@Scheduled 多个定时任务同时执行

1、定时任务是单线程运行的

定时任务是单线程执行的,默认一个时间段只能执行一个定时任务

如果多个定时任务同时执行的话,那么会按照顺序执行

2、多线程开启定时任务

创建线程池,且注入到spring 中,

@EnableScheduling 定时任务扫描,开始定时任务计划支持

代码语言:javascript
复制
@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() + "条短信提醒---***");

    }
}

总结:

@Scheduled 是 Spring 框架中用于创建定时任务的注解,它可以用于方法上,允许你定义方法在指定的时间间隔或固定时间点执行。如果你有多个使用 @Scheduled 注解的方法,它们默认会在相应的时间点并行执行。在这种情况下,需要注意一些问题来确保多个定时任务能够同时执行而不发生冲突。

以下是关于@Scheduled多个定时任务同时执行的一些方法总结:

  1. 线程安全性: 确保你的定时任务方法是线程安全的。因为多个定时任务方法会并行执行,如果这些方法操作了共享资源,你需要考虑线程安全问题,使用同步或其他线程安全机制来避免竞态条件。
  2. 任务间隔与执行时间: 注意多个定时任务的执行时间和间隔。如果某个任务的执行时间比较长,可能会影响其他任务的正常执行。确保任务的执行时间不会导致任务之间的间隔过小,以免任务之间相互影响。
  3. 线程池配置: Spring 使用一个线程池来执行定时任务,默认情况下,线程池大小为1,意味着所有的定时任务都在同一个线程中执行。你可以通过配置 ThreadPoolTaskSchedulerTaskScheduler 的 bean 来自定义线程池,以控制定时任务的并发度。
  4. 任务优先级: 如果你希望某个定时任务有更高的优先级,你可以通过合理调整线程池的大小或使用不同的线程池来实现。请注意,过多的线程可能会导致资源竞争和性能问题,因此需要平衡优先级和系统资源。
  5. 日志和异常处理: 为了方便调试和监控,定时任务应该记录适当的日志信息。另外,定时任务方法可能会抛出异常,你需要适当地处理这些异常,以避免影响其他任务的执行。
  6. 分布式环境: 如果你的应用是分布式的,多个实例同时执行定时任务,你需要确保定时任务在分布式环境下的唯一性,避免重复执行。可以使用分布式锁或其他分布式协调机制来实现。
  7. 任务耗时监控: 为了确保定时任务的性能和稳定性,可以通过监控系统来收集任务的执行时间和执行次数等信息,以及慢任务的排查和优化。

总之,@Scheduled 注解允许你在 Spring 中方便地创建定时任务,但在多个定时任务同时执行时,需要考虑线程安全、任务间隔、线程池配置、异常处理等因素,以确保定时任务能够在并行执行时保持稳定和高效。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @Scheduled 多个定时任务同时执行
  • 1、定时任务是单线程运行的
  • 2、多线程开启定时任务
    • 总结:
    相关产品与服务
    短信
    腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com