我在理解 ScheduledThreadPoolExecutor 的工作原理时遇到了一点问题(我正在使用 SCA,所以不要打扰代码中的注释)。这是我的调度程序类代码的一部分:
@AllowsPassByReference
public ScheduledFuture<?> schedule(Task task)
{
future=scheduler.scheduleAtFixedRate(task.getRunnableContent(), task.getDelay(), task.getPeriod(), TimeUnit.MILLISECONDS);
return future;
}
@AllowsPassByReference
public void deschedule(Task task)
{
scheduler.remove(task.getRunnableContent());
}
这是我的任务类代码的一部分:
public void scheduleTask()
{
if(!running)
{
future=scheduler.schedule(this);
running=true;
}
}
public void descheduleTask()
{
if(running)
{
future.cancel(mayInterruptIfRunning);
scheduler.deschedule(this);
running=false;
}
}
现在这是大问题!我到处看到人们在 ScheduledFutures 上使用取消,然后在调度程序上使用关闭方法,但我不想停止调度程序。让我稍微解释一下:在这个应用程序中,周期性任务必须在任何时候单独调度、停止和重新调度,所以我需要一种方法来在单个任务开始运行时中断它,而无需关闭整个调度程序服务。我希望你能理解我在做什么,有什么建议吗?谢谢 :)