ScheduledExecutorService, how to stop action without stopping executor?

executors, java

Solution

Use `result.cancel()`. The `ScheduledFuture` is the handle for your task. You need to cancel this task and it will not be executed any more.

Actually, `cancel(boolean mayInterruptIfRunning)` is the signature and using it with `true` parameter will cause a currently running exection's thread to be interrupted with the `interrupt()` call. This will throw an interrupted exception if the thread is waiting in a blocking interruptible call, like `Semaphore.acquire()`. Keep in mind that `cancel` will ensure only that the task will not be executed any more once it stopped the execution.

Problem

I have this code: ``` ScheduledExecutorService scheduledExecutor; ..... ScheduledFuture<?> result = scheduledExecutor.scheduleWithFixedDelay( new SomethingDoer(),0, measurmentPeriodMillis, TimeUnit.MILLISECONDS); ``` After some event I should stop action, which Declared in `run()` method of the `SomethingDoer`, which implements `Runnable`. How can I do this? I can't shutdown executor, I should only revoke my periodic task. Can I use `result.get()` for this? And if I can, please tell me how it will work.

Original source