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.
Use
result.cancel()
. TheScheduledFuture
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 withtrue
parameter will cause a currently running exection's thread to be interrupted with theinterrupt()
call. This will throw an interrupted exception if the thread is waiting in a blocking interruptible call, likeSemaphore.acquire()
. Keep in mind thatcancel
will ensure only that the task will not be executed any more once it stopped the execution.You can use the
cancel()
method from yourScheduledFuture
object. Once cancelled, no further tasks will be executed.If you want your currently running task to stop, you need to code your
run
method so it is sensitive to interrupts and passtrue
to thecancel()
method to request an interrupt.