springBoot @Scheduled实现多个任务同时开始执行
更新时间:2021年12月28日 16:45:17 作者:李振伟
这篇文章主要介绍了springBoot @Scheduled实现多个任务同时开始执行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
@Scheduled多个任务同时开始执行
只需在springBoot启动类上添加
如下代码即可:
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskExecutor = new ThreadPoolTaskScheduler();
taskExecutor.setPoolSize(50);
return taskExecutor;
}

@Scheduled多定时任务,重叠执行
@Scheduled如果有两个定时任务
定时任务重复时,只有一个可以执行。
如下
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class MyScheduled {
@Scheduled(cron = "0/5 * * * * ?")
public void execute1(){
String curName = Thread.currentThread().getName() ;
System.out.println("当前时间:"+LocalDateTime.now()+" 任务execute1对应的线程名: "+curName);
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
@Scheduled(cron = "0/5 * * * * ?")
public void execute2(){
String curName = Thread.currentThread().getName() ;
System.out.println("当前时间:"+LocalDateTime.now()+" 任务execute2对应的线程名: "+curName);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
通过执行可以看到,打印线程名称为同一个。即如果不手动指定线程池,则默认启动单线程,进行执行定时任务。
如果想要多个定时任务重叠执行
需要手动指定线程池,如下
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
@EnableScheduling
public class MyScheduled {
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(50);
return taskScheduler;
}
@Scheduled(cron = "0/5 * * * * ?")
public void execute1(){
String curName = Thread.currentThread().getName() ;
System.out.println("当前时间:"+LocalDateTime.now()+" 任务execute1对应的线程名: "+curName);
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
@Scheduled(cron = "0/5 * * * * ?")
public void execute2(){
String curName = Thread.currentThread().getName() ;
System.out.println("当前时间:"+LocalDateTime.now()+" 任务execute2对应的线程名: "+curName);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
此时,多个定时任务,是不通的线程执行,同时,定时任务可以重叠执行。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
mybatis/mybatis-plus模糊查询语句特殊字符转义拦截器的实现
在开发中,我们通常会遇到这样的情况。用户在录入信息是录入了‘%’,而在查询时无法精确匹配‘%’。究其原因,‘%’是MySQL的关键字,如果我们想要精确匹配‘%’,那么需要对其进行转义,本文就详细的介绍一下2021-11-11
IDEA(2022.2)搭建Servlet基本框架超详细步骤
这篇文章主要给大家介绍了关于IDEA(2022.2)搭建Servlet基本框架超详细步骤,Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用"请求/响应"的模式,需要的朋友可以参考下2023-10-10
springboot2.x只需两步快速整合log4j2的方法
这篇文章主要介绍了springboot2.x只需两步快速整合log4j2的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-05-05
使用MyBatisPlus自动生成代码后tomcat运行报错的问题及解决方法
这篇文章主要介绍了使用MyBatisPlus自动生成代码后tomcat运行报错的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08


最新评论