繁体   English   中英

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

[英]ScheduledExecutorService, how to stop action without stopping executor?

我有以下代码:

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

在发生一些事件之后,我应该停止操作,该操作在SomethingDoer run()方法中声明,该方法实现了Runnable

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM