9

我有这个代码:

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

在某些事件之后,我应该停止在实现的run()方法中声明的操作。SomethingDoerRunnable

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

4

2 回答 2

15

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

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

于 2013-07-02T07:26:24.180 回答
5

您可以使用对象中的cancel()方法ScheduledFuture。一旦取消,将不再执行任何任务。

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

于 2013-07-02T07:24:11.663 回答