我有以下代码:
ScheduledExecutorService scheduledExecutor;
.....
ScheduledFuture<?> result = scheduledExecutor.scheduleWithFixedDelay(
new SomethingDoer(),0, measurmentPeriodMillis, TimeUnit.MILLISECONDS);
在发生一些事件之后,我应该停止操作,该操作在
run()
的SomethingDoer
方法中声明,该方法实现了Runnable
。我怎样才能做到这一点?我无法关闭执行器,只能撤消我的定期任务。我可以为此使用
result.get()
吗?如果可以的话,请告诉我它如何工作。
最佳答案
使用result.cancel()
。 ScheduledFuture
是您的任务的句柄。您需要取消此任务,它将不再执行。
实际上,cancel(boolean mayInterruptIfRunning)
是签名,将其与true
参数一起使用将导致当前正在运行的执行线程被interrupt()
调用中断。如果线程在阻塞的可中断调用(例如Semaphore.acquire()
)中等待,则会抛出一个中断的异常。请记住,cancel
将确保仅在任务停止执行后不再执行该任务。
关于java - ScheduledExecutorService,如何在不停止执行程序的情况下停止操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27425734/