ScheduledExecutorService,如何在不停止执行程序的情况下停止操作?

我有这个代码:

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

在某些事件之后我应该停止操作,它在SomethingDoer run()方法中声明,它实现了Runnable

我怎样才能做到这一点? 我无法关闭执行程序,我应该只撤销我的周期性任务。 我可以使用result.get()吗? 如果可以,请告诉我它将如何运作。

使用result.cancel()ScheduledFuture是您的任务的句柄。 您需要取消此任务,它将不再执行。

实际上, cancel(boolean mayInterruptIfRunning)是签名,使用true参数将导致当前正在运行的exection的线程被interrupt()调用interrupt() 。 如果线程在阻塞可中断调用中等待,如Semaphore.acquire() ,这将抛出一个中断的exception。 请记住, cancel将确保只有在任务停止执行后不再执行任务。

您可以使用ScheduledFuture对象中的cancel()方法。 取消后,将不会执行任何其他任务。

如果希望当前正在运行的任务停止,则需要对run方法进行编码,使其对中断敏感,并将true传递给cancel()方法以请求中断。