如何中断ScheduledExecutorService

时间:2017-08-01 13:46:36

标签: java scheduledexecutorservice

我有ScheduledExecutorService我每隔一分钟运行一次方法updateIndex()。但是,如果在上次刷新和下次刷新之间的一分钟内对资源进行了更改,我希望立即调用updateIndex(),然后让执行程序服务恢复正常的日程安排;即下一次更新将在一分钟内完成。但是,我没有在文档中看到任何表明有能力执行此操作的内容。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

public static void updateIndex() {
        Runnable runnable = () -> {
            //Do your logic here
        };
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.MINUTES);
        }

根据JavaDocs

java.util.concurrent.ScheduledExecutorService.scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

创建并执行一个周期性操作,该操作在给定的初始延迟后首先启用,然后在给定的时间段内启用;即执行将在initialDelay之后开始,然后是initialDelay + period,然后是initialDelay + 2 * period,依此类推。如果任务的任何执行遇到异常,则后续执行被禁止。否则,任务将仅通过取消或终止执行者来终止。如果执行此任务的时间超过其周期,则后续执行可能会延迟,但不会同时执行。

答案 1 :(得分:0)

scheduleAtFixedRate()会返回一个ScheduledFuture Future,其中包含您正在寻找的cancel方法。