ScheduledExecutorService, как остановить действие без остановки исполнителя?

у меня есть этот код:

ScheduledExecutorService scheduledExecutor;
.....
ScheduledFuture<?> result = scheduledExecutor.scheduleWithFixedDelay(
    new SomethingDoer(),0, measurmentPeriodMillis, TimeUnit.MILLISECONDS);

после некоторого события я должен остановить действие, которое объявлено в run() метод SomethingDoer, который реализует Runnable.

как я могу это сделать? Я не могу отключить executor, я должен только отозвать свою периодическую задачу. Могу ли я использовать result.get() для этого? И если я могу, пожалуйста, скажите мне, как это будет работать.

2 ответов


использовать result.cancel(). The ScheduledFuture ручка для ваших задач. Вам нужно отменить эту задачу, и она больше не будет выполняться.

на самом деле cancel(boolean mayInterruptIfRunning) - это подпись и ее использование с true параметр приведет к тому, что текущий поток exection будет прерван с помощью interrupt() звонок. Это вызовет прерывистое исключение, если поток ожидает в блокирующем прерываемом вызове, например Semaphore.acquire(). Имейте в виду, что cancel будет гарантировать только, что задача не будет казнили еще раз, как только прекратили казнь.


можно использовать cancel() метод из вашего ScheduledFuture