Java 我是否可以跳过当前执行延迟或立即重新启动计划执行服务?

Java 我是否可以跳过当前执行延迟或立即重新启动计划执行服务?,java,android,scheduledexecutorservice,Java,Android,Scheduledexecutorservice,我有一个定时执行服务,它每X秒执行一个方法。是否可能有一种方法可以强制计划执行服务跳过执行延迟中的剩余时间,并立即调用该方法。或者我可以简单地停止它并立即重新启动它吗 这是我的密码: Runnable runnable = new Runnable() { public void run() { callTheFunction(); } }; ScheduledExecutorService executor; executor = Executors.ne

我有一个定时执行服务,它每X秒执行一个方法。是否可能有一种方法可以强制计划执行服务跳过执行延迟中的剩余时间,并立即调用该方法。或者我可以简单地停止它并立即重新启动它吗

这是我的密码:

Runnable runnable = new Runnable() {
    public void run() {

        callTheFunction();

    }
};

ScheduledExecutorService executor;
executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(Runnable, 0, 5, TimeUnit.SECONDS); // 0 sec delay | 5 sec repeat

public void restartTheExecutor() {
    // code to restart it or skip the remaining time.
}
这是我的更新和工作代码,它在参数中包含一个布尔值,必须在第一次运行时设置为false

public void restartExecutor(View v, boolean stopRequiered) {

    if (stopRequiered) {
        scheduled.cancel(true);
    }

    Runnable runnable = new Runnable() {
        public void run() {
            nextExpression();
        }
    };

    ScheduledExecutorService executor;
    executor = Executors.newScheduledThreadPool(1);
    scheduled = executor.scheduleAtFixedRate(runnable, 0, 3, TimeUnit.SECONDS); // 0 sec delay | 5 sec repeat

}

无法使用
ScheduledExecutorService
强制执行调度功能以立即运行

然而,对于第二个问题,答案是肯定的。您可以随时删除任何计划的函数,并根据需要运行它。但是,您需要单独引用该函数:

Runnable runnable = new Runnable() {
    public void run() {
        callTheFunction();
    }
};

ScheduledExecutorService executor;
executor = Executors.newScheduledThreadPool(1);
Future<?> scheduled = executor.scheduleAtFixedRate(runnable, 0, 5, TimeUnit.SECONDS); // 0 sec delay | 5 sec repeat

// cancel and run immediately:
scheduled.cancel(true);
runnable.run();
或者只需异步运行0秒延迟,然后重复5秒,即可完成这两个步骤:

scheduled.cancel(true);
scheduled = executor.scheduleAtFixedRate(runnable, 0, 5, TimeUnit.SECONDS); // 0 sec delay | 5 sec repeat

我遇到了一点错误,我在一个函数中运行了你的代码,它只运行一次并停止。@詹姆斯:正如我所写的,你需要重新安排时间,因为
cancel()
取消了以后的所有运行,而不仅仅是下一次运行。请参阅完整答案(我更新了另一个解决方案)。我被Runnable.run()弄糊涂了。它到底做什么?我需要它吗?谢谢你的澄清,我将我的实现添加到question@james:它立即运行runnable。如果使用上一个在后台立即运行的解决方案,则不需要它。
scheduled.cancel(true);
scheduled = executor.scheduleAtFixedRate(runnable, 0, 5, TimeUnit.SECONDS); // 0 sec delay | 5 sec repeat