软件编程
位置:首页>> 软件编程>> java编程>> springBoot @Scheduled实现多个任务同时开始执行

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

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

标签:springBoot,@Scheduled,多任务,执行

@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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com