广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java中多个@Scheduled定时器不执行的解决方法
  • 696
分享到

java中多个@Scheduled定时器不执行的解决方法

java定时器schedulejava定时器不触发java scheduled注解 2023-05-14 11:05:27 696人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

项目背景:在项目中包含两个定时任务,配置信息如下: 1、@Scheduled(initialDelay = 1,fixedDelay=10000) public voud aa(){

项目背景:在项目中包含两个定时任务,配置信息如下:

1、@Scheduled(initialDelay = 1,fixedDelay=10000)

public voud aa(){}

1、@Scheduled(initialDelay = 1,fixedDelay=10000)

public voud bb(){}

我们需要的都是项目启动后,同时调用执行aa 和bb 方法,我们发现只能执行其中一个!那么如何解决呢?

原因是:@Scheduled注解会在默认情况下以单线程的方式执行定时任务。

这个“单线程”指两个方面:

如果一个定时任务执行时间大于其任务间隔时间,那么下一次将会等待上一次执行结束后再继续执行。
如果多个定时任务在同一时刻执行,任务会依次执行。

我们项目都是配置了initialDelay =1 ,Scheduled启动一个的时候,另外一个根本得不到执行!当然fixedDelay是可以正常按照执行间隔来执行的,就是首次执行收到影响!

为了让@Scheduled效率更高,我们可以通过两种方法将定时任务变成多线程执行::

方法1、在启动类中配置TaskScheduler线程池大小

@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(10);//不配置默认是1
return taskScheduler;
}

方法2、利用Spring提供的@Async注解和@EnableAsync注解

@Component
@EnableAsync
public class TimedTask{
@Async
@Scheduled(initialDelay = 1,fixedDelay=10000)
public void aa() {
//执行你的业务逻辑
}

@Async
@Scheduled(initialDelay = 1,fixedDelay=10000)
public void bb() {
//执行你的业务逻辑
}

总结

到此这篇关于java中多个@Scheduled定时器不执行的文章就介绍到这了,更多相关java多个@Scheduled定时器不执行内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java中多个@Scheduled定时器不执行的解决方法

本文链接: https://www.lsjlt.com/news/203086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作