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