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()
方法以请求中断。