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

网友投稿 1187 2022-11-11

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

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

目录@Scheduled多个任务同时开始执行只需在springBoot启动类上添加@Scheduled多定时任务,重叠执行@Scheduled如果有两个定时任务如果想要多个定时任务重叠执行

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

只需在springBoot启动类上添加

如下代码即可:

@Bean

public TaskScheduler taskScheduler() {

ThreadPoolTaskScheduler taskExecutor = new ThreadPoolTaskScheduler();

taskExecutor.setPoolSize(50);

return taskExecutor;

}

@Scheduled多定时任务,重叠执行

@Scheduled如果有两个定时任务

定时任务重复时,只有一个可以执行。

如下

import org.springframework.scheduling.annotation.Schhttp://eduled;

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();

}

}

}

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:汇编:mov指令
下一篇:索引(三)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~