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

标签 java executors

我有以下代码:

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/

相关文章:

java - 数组列表排序

Java.util.zip 添加新文件会覆盖整个 jar 吗?

Java-使用 invokeAll 按顺序获取 future 结果,但仅适用于某些线程

java - 有没有一种简单的方法可以告诉 Java Executor 在给定时刻正在运行哪些任务?

java - 多线程 newSingleThreadExecutor 饥饿死锁

java - 为什么我的Java应用程序每次编译数据库包后都需要重新启动?

hibernate - 在 J2SE 应用程序中从 persistence.xml 外部化凭据

java - Hibernate 查询用于从具有路径变量输入的表中选择值

java - 为什么我不能构造一个由 DelayQueue 支持的 ThreadPoolExecutor?

Java执行器在特定时间的时间范围内