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
будет гарантировать только, что задача не будет казнили еще раз, как только прекратили казнь.