我有这段代码:
ScheduledExecutorService scheduledExecutor;
.....
ScheduledFuture<?> result = scheduledExecutor.scheduleWithFixedDelay(
new SomethingDoer(),0, measurmentPeriodMillis, TimeUnit.MILLISECONDS);
在某些事件发生后,我应该停止操作,该操作在run()
的{{1}}方法中声明,该方法实现SomethingDoer
。
我该怎么做?我无法关闭执行程序,我应该只撤销我的周期性任务。我可以使用Runnable
吗?如果可以,请告诉我它将如何运作。
答案 0 :(得分:13)
使用result.cancel()
。 ScheduledFuture
是您的任务的句柄。您需要取消此任务,它将不再执行。
实际上,cancel(boolean mayInterruptIfRunning)
是签名,并且使用true
参数将导致当前正在运行的exection的线程被interrupt()
调用中断。如果线程在阻塞可中断调用中等待Semaphore.acquire()
,则会抛出一个中断的异常。请记住,cancel
只会确保任务在停止执行后不再执行。
答案 1 :(得分:5)
您可以使用cancel()
对象中的ScheduledFuture
方法。一旦取消,将不会执行任何其他任务。
如果您希望当前正在运行的任务停止,则需要对run
方法进行编码,使其对中断敏感并将true
传递给cancel()
方法以请求中断。