zoukankan      html  css  js  c++  java
  • spring的@Scheduled定时任务,同一时间段的定时任务只会执行一个,其余的会被阻塞,@Scheduled注解定时任务并发执行解决办法,即多线程运行定时任务

    原文:https://blog.csdn.net/qq_35937303/article/details/88851064

    现有两个定时任务

    @Component("aa")
    public class aa {
        @Scheduled(cron = "0 44 17 * * ?")
        public void bb() {
            try {
                System.out.println("aa执行时间:" + new Date());
                Thread.sleep(65000);
                System.out.println("aa完成时间:" + new Date());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
     
    @Component("bb")
    public class bb {
        @Scheduled(cron = "0 55 17 * * ?")
        public void aa() {
            try {
                System.out.println("bb执行时间:" + new Date());
                Thread.sleep(10000);
                System.out.println("bb完成时间:" + new Date());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    } 

    默认的在启动项加入@EnableScheduling注解就可以运行了

    最终,执行的结果令人大跌眼镜。

    aa的任务由于执行时间需要65秒,超过了bb任务执行的时间,结果bb任务执行的时间被阻塞掉,延迟了5秒执行。

    解决方法是在启动项类中加入如下配置即可

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

    如果是xml

    <!-- 注解式 -->

    <task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
    <task:executor id="myExecutor" pool-size="5"/>
    <task:scheduler id="myScheduler" pool-size="10"/>
     

  • 相关阅读:
    git功能速查
    iPad actionsjeet
    iOS开发中集成Reveal
    【转】ios内联函数 inline
    【转】数据存储——APP 缓存数据线程安全问题探讨
    iOS 改变导航栏高度
    ios 闪屏页的设置
    AFNetworking content type not support
    iOS 获取本地文件的各种坑
    iOS UICollectionView 长按移动cell
  • 原文地址:https://www.cnblogs.com/shihaiming/p/11429204.html
Copyright © 2011-2022 走看看