您当前的位置: 首页 >  spring

Linux小百科

暂无认证

  • 0浏览

    0关注

    1185博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

Linux小百科 发布时间:2022-01-09 12:39:10 ,浏览量:0

这篇文章主要介绍了springBoot @Scheduled实现多个任务同时开始执行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

只需在springBoot启动类上添加

如下代码即可:

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

springBoot @Scheduled多任务同时开始执行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();
        }
    }
}

此时,多个定时任务,是不通的线程执行,同时,定时任务可以重叠执行。

 

关注
打赏
1665632672
查看更多评论
立即登录/注册

微信扫码登录

0.0436s