问答

Spring的定时任务<task:scheduled-tasks>问题

作者:admin 2021-05-09 我要评论

请问一下有一个定时任务Task每3秒钟执行一次,在这个定时任务的for循环里创建A,每次开启一个线程将A丢进去,A继承Runnable接口,run方法运行10s bean id="timer...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

请问一下有一个定时任务Task每3秒钟执行一次,在这个定时任务的for循环里创建A,每次开启一个线程将A丢进去,A继承Runnable接口,run方法运行10s

<bean id="timerATask" class="xxxxxx.A"></bean>
    <task:scheduled-tasks>
        <task:scheduled ref="timerATask" method="task" cron="*/3 * * * * ?"/>
    </task:scheduled-tasks>

有两个问题
1.每次循环是不是taskExecutor.execute(t1);执行完就会执行下一次for循环,和新开启线程内的run方法是否被执行结束没关系吧
2.for循环1000次执行完成后,但是run方法中的执行时间为10s是超过3s的没有执行完,定时任务到3s的时候还会继续执行吗,还是说等所有run方法结束后等3s才执行


public class Task {
    private static Logger logger = LoggerFactory.getLogger(Task.class);
    @Resource(name = "taskExecutor")
    private TaskExecutor taskExecutor;
    public void task() {
        logger.info("==========开始执行定时任务==========");
            for (int x = 0; x < 1000; x++) {
            try {
                        A a = new A(x);
                        Thread t1 = new Thread(a);
                        taskExecutor.execute(t1);

             } catch (Exception e) {
             }
        }
    }

public class A implements Runnable {
    private int x;
    public void run() {
        System.out.println(this.x);
        /* 逻辑处理执行时间10s     */
    }
    public A(int x) {
        this.x = x;
    }
}
###

说实话,你这题提的很迷糊,到底是for里面是定时任务,还是整个for是一个定时任务,看你声明就是乱的,A哪有task方法???
个人猜测你需要的答案,整个for是一个定时器任务。
1.从多线程的角度,不考虑定时器,没有任何关系。
2.这个看你用哪种框架,ScheduledExecutorService 就有关系,特别说明了不会同时执行一个任务,而quartz,就可以同时执行一个任务,你任务花多少时间他不管,只要线程池够用就行。但从cron表达式上来说,除了资源外,任务之间是不存在依赖关系的,同一个任务也是如此,ScheduledExecutorService 也没有说明是cron任务

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • grom设置json默认值

    grom设置json默认值

  • Vue路由报错,看着没问题

    Vue路由报错,看着没问题

  • 思否邮箱登录为什么区分大小写了呢?

    思否邮箱登录为什么区分大小写了呢?

  • 有没有能够直接上传markdown文件作为博

    有没有能够直接上传markdown文件作为博

腾讯云代理商
海外云服务器