springBoot @Scheduled实现多个任务同时开始执行

作者:李振伟 时间:2023-06-19 23:16:41 

@Scheduled多个任务同时开始执行

只需在springBoot启动类上添加

如下代码即可:


@Bean
   public TaskScheduler taskScheduler() {
       ThreadPoolTaskScheduler taskExecutor = new ThreadPoolTaskScheduler();
       taskExecutor.setPoolSize(50);
       return taskExecutor;
   }

springBoot @Scheduled实现多个任务同时开始执行

@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
  • asp之家 软件编程 m.aspxhome.com