springboot + @scheduled 多任务并发详解编程语言

一、问题

项目采用springboot搭建,想给方法[email protected],实现两个定时任务。可是运行发现,两个task并没有并发执行,而是执行完一个task才会执行另外一个。上代码:

package com.autohome.contentplatform.tasks; 
  
import org.springframework.beans.factory.annotation.Configurable; 
import org.springframework.scheduling.annotation.EnableScheduling; 
import org.springframework.scheduling.annotation.Scheduled; 
import org.springframework.stereotype.Component; 
  
@Component 
@Configurable 
@EnableScheduling 
public class task1 { 
     @Scheduled(cron = "0/5 * *  * * ? ") 
     public void startSchedule() { 
         System.out.println("===========1=>"); 
         try { 
             for(int i=1;i<=10;i++){ 
                 System.out.println("=1==>"+i); 
                 Thread.sleep(1000); 
             } 
         } catch (InterruptedException e) { 
             e.printStackTrace(); 
         } 
     } 
     @Scheduled(cron = "0/5 * *  * * ? ") 
     public void startSchedule2() { 
         for(int i=1;i<=10;i++){ 
             System.out.println("=2==>"+i); 
             try { 
                 Thread.sleep(1000); 
             } catch (InterruptedException e) { 
                 e.printStackTrace(); 
             } 
         } 
     } 
}

运行发现任务没有并行执行。

二、解决

[email protected][email protected]

@Component 
@Configurable 
@EnableScheduling 
@EnableAsync 
public class DemoTask { 
     @Async 
     @Scheduled(cron = "0/5 * *  * * ? ") 
     public void startSchedule() { 
         System.out.println("===========1=>"); 
         try { 
             for(int i=1;i<=10;i++){ 
                 System.out.println("=1==>"+i); 
                 Thread.sleep(1000); 
             } 
         } catch (InterruptedException e) { 
             e.printStackTrace(); 
         } 
     } 
  
    @Async 
     @Scheduled(cron = "0/5 * *  * * ? ") 
     public void startSchedule2() { 
         for(int i=1;i<=10;i++){ 
             System.out.println("=2==>"+i); 
             try { 
                 Thread.sleep(1000); 
             } catch (InterruptedException e) { 
                 e.printStackTrace(); 
             } 
         } 
     } 
}

再次运行,发现两个任务可以并发执行了。

三、参考资料:

https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15694.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论