我使用调度程序来确保我的循环不会花费太长时间,所以如果调度程序触发并结束循环,我会退出循环。
这很简单:
public void startSchedulerForTimeout() {
Log.i("x", "SCHEDULING TIMEOUT " );
timeoutForLoopReached = false;
scheduler.schedule(new Runnable() {
public void run() {
timeoutForLoopReached = true;
Log.i("x", "SET TIMEOUT FLAG ");
}
}, 10, TimeUnit.SECONDS);
}
所以在我的代码中我只写:
startSchedulerForUSBMessageTimeout();
while (!done && !timeoutForLoopReached) {
...do the loop stuff
}
为了确保在我再次运行循环时不会触发计划任务,我需要取消计划过时的任务(如果我在超时前结束循环),以便新计时器将在新的开始时再次启动循环(而不是在第一次循环完成后第二次循环执行之后的旧的触发)
如何才能取消计划未被触发的任何计划任务以避免此计划任务混淆?
非常感谢!
答案 0 :(得分:5)
ScheduledExecutorService scheduledTaskExecutor = Executors.newScheduledThreadPool(1);
Runnable longRunningTask = new Runnable();
// schedule long running task in 2 minutes:
ScheduledFuture scheduleFuture = scheduledTaskExecutor.schedule(longRunningTask, 2, TimeUnit.MINUTES);
... ...
// At some point in the future, if you want to cancel scheduled task:
scheduleFuture.cancel(true);
... ...
答案 1 :(得分:1)