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

9

我有这段代码:

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

在触发某个事件后,我应该停止由实现Runnable接口的SomethingDoer类中的run()方法所声明的动作。我不能关闭执行器,只能撤销我的定期任务。我可以使用 result.get() 吗?如果可以,请告诉我它如何工作。
2个回答

15
使用result.cancel()ScheduledFuture是您任务的句柄。您需要取消此任务,它将不再被执行。
实际上,cancel(boolean mayInterruptIfRunning)是签名,并使用true参数会导致当前正在运行的执行线程被中断并调用interrupt()。如果线程在阻塞可中断调用中等待,如Semaphore.acquire(),则会抛出中断异常。请记住,cancel仅确保一旦停止执行,该任务将不再被执行。

6
你可以使用 cancel() 方法来取消你的 ScheduledFuture 对象。一旦取消,将不会执行进一步的任务。
如果你想要停止当前正在运行的任务,你需要编写你的 run 方法,使其对中断敏感,并传递 truecancel() 方法以请求中断。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接