Spring的定时任务问题

发布于 2022-09-12 13:58:41 字数 1295 浏览 24 评论 0

请问一下有一个定时任务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;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

司马昭之心 2022-09-19 13:58:41

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文