У меня небольшая проблема с пониманием того, как работает ScheduledThreadPoolExecutor (я использую SCA, поэтому не беспокойтесь об аннотациях внутри кода). Это часть кода из моего класса Scheduler:
@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());
}
И это часть кода из моего класса Task:
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, а затем использовали метод выключения в планировщике, но я не хочу останавливать планировщик. Позвольте мне объяснить немного лучше: в этом приложении периодические задачи должны быть запланированы, остановлены и перепланированы по отдельности в любое время, поэтому мне нужен способ прервать одну задачу после ее запуска без отключения всей службы планировщика. Надеюсь, вы понимаете, что я пытаюсь сделать, какой-нибудь совет? Спасибо :)