Прерывание и перезапуск задач при использовании ScheduledThreadPoolExecutor

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


person user2163438    schedule 13.03.2013    source источник


Ответы (1)


Когда мы отменяем периодическую задачу, последующее планирование этой задачи будет отменено, но сам планировщик будет запущен и может использоваться для планирования другой задачи.

Если мы вызовем Future.cancel во время выполнения задачи, то

а) Future.cancel(false) не повлияет на текущую задачу

б) Future.cancel(true) вызовет Threed.interrupt в потоке задачи, но остановится работающая задача или нет, зависит от реализации задачи. Например, задача может поймать InterruptedException (если есть) и продолжить работу.

person Evgeniy Dorofeev    schedule 13.03.2013
comment
Спасибо за ответ, по крайней мере, теперь я знаю, что проблемы, которые у меня возникают, должны быть как-то связаны с тем, как SCA управляет моими классами. - person user2163438; 13.03.2013