我可以跳过当前执行延迟或立即重新启动计划执行服务吗?
Can I skip the current execution delay or restart immediately an Scheduled Execution Service?
我有一个计划执行服务,每 X 秒执行一个方法。有没有可能有一个方法可以强制Scheduled Execution Service跳过执行延迟中的剩余时间并立即调用该方法。或者我可以简单地停止它并立即重新启动它吗?
这是我的代码:
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();
请注意,cancel()
不仅会取消下一个(或当前)运行,还会取消所有未来的 运行。所以你必须重新安排时间:
// reassigned scheduled to next runs:
scheduled = executor.scheduleAtFixedRate(runnable, 5, 5, TimeUnit.SECONDS); // 5 sec delay | 5 sec repeat
或者简单地通过 运行 异步执行这两个步骤,延迟 0 秒并再次重复 5 秒:
scheduled.cancel(true);
scheduled = executor.scheduleAtFixedRate(runnable, 0, 5, TimeUnit.SECONDS); // 0 sec delay | 5 sec repeat
我有一个计划执行服务,每 X 秒执行一个方法。有没有可能有一个方法可以强制Scheduled Execution Service跳过执行延迟中的剩余时间并立即调用该方法。或者我可以简单地停止它并立即重新启动它吗?
这是我的代码:
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();
请注意,cancel()
不仅会取消下一个(或当前)运行,还会取消所有未来的 运行。所以你必须重新安排时间:
// reassigned scheduled to next runs:
scheduled = executor.scheduleAtFixedRate(runnable, 5, 5, TimeUnit.SECONDS); // 5 sec delay | 5 sec repeat
或者简单地通过 运行 异步执行这两个步骤,延迟 0 秒并再次重复 5 秒:
scheduled.cancel(true);
scheduled = executor.scheduleAtFixedRate(runnable, 0, 5, TimeUnit.SECONDS); // 0 sec delay | 5 sec repeat