首页 > 解决方案 > Java - 递归调度计时器任务

问题描述

有没有办法仅在方法完成后才运行计时器任务。该方法可能需要 10 秒,但计时器设置为每 5 秒运行一次。我希望它仅在 10 秒后再次运行。

    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            longRunningMethod();
            timer.schedule(task, 0, 5000);
        }
    };
    timer.schedule(task, 0, 10000);

标签: java

解决方案


您可以使用ScheduledExecutorServicewhich has a scheduleWithFixedDelay()method 正是这样做的。

“创建并执行一个周期性操作,该操作在给定的初始延迟后首先启用,随后在一个执行的终止和下一个执行的开始之间具有给定的延迟。”

所以你可以做

ExecutorService.newScheduledExecutor()
    .submit(this::longRunningMethod, 0, 1000, ChronoUnit.MILLIS);

推荐阅读