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

时间:2013-07-02 07:02:14

标签: java executors

我有这段代码:

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

在某些事件发生后,我应该停止操作,该操作在run()的{​​{1}}方法中声明,该方法实现SomethingDoer

我该怎么做?我无法关闭执行程序,我应该只撤销我的周期性任务。我可以使用Runnable吗?如果可以,请告诉我它将如何运作。

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:5)

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

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