springBoot @Scheduled实现多个任务同时开始执行
作者:李振伟 时间:2023-06-19 23:16:41
@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();
}
}
}
此时,多个定时任务,是不通的线程执行,同时,定时任务可以重叠执行。
来源:https://blog.csdn.net/lifulian318/article/details/114277044
标签:springBoot,@Scheduled,多任务,执行
0
投稿
猜你喜欢
Android实现Tab切换界面功能详解
2022-01-17 16:11:57
ScrollView与ListView合用(正确计算Listview的高度)的问题解决
2021-12-30 07:14:58
Android实现按钮拖拽还原功能
2023-10-22 18:31:13
SpringBoot自动装配原理详解
2023-07-03 05:49:08
MyBatis全局配置文件详解
2021-09-19 10:13:32
java实现截取PDF指定页并进行图片格式转换功能
2023-08-24 02:58:56
java学习之利用TCP实现的简单聊天示例代码
2021-07-13 00:43:18
Java实现链表数据结构的方法
2023-10-19 20:36:57
c#调用存储过程实现登录界面详解
2023-01-02 22:03:07
Retrofit之OKHttpCall源码分析
2021-11-13 22:08:53
Android Studio使用小技巧:提取方法代码片段
2023-11-14 19:35:20
Java多线程:生产者与消费者案例
2021-06-30 05:47:08
C#使用windows服务开启应用程序的方法
2022-08-14 04:37:14
C/C++与Java各数据类型所占字节数的详细比较
2022-09-08 11:39:55
零基础写Java知乎爬虫之准备工作
2022-10-25 01:19:18
java 集合----Map、Collection
2022-11-09 03:39:01
android canvas使用line画半圆
2022-01-05 17:58:57
使用Mybatis-Plus时的SqlSessionFactory问题及处理
2022-01-30 07:40:04
如何实现java Iterator迭代器功能
2023-10-14 14:30:49
SpringMVC后端返回数据到前端代码示例
2023-06-20 13:12:47