我有一个ScheduledExecutorService
,我每分钟要使用它运行方法updateIndex()
。但是,如果在上一次刷新和下一次刷新之间的一分钟内对资源进行了更改,我希望立即调用updateIndex()
,然后让执行程序服务恢复其正常时间表;即下一次更新将在一分钟内完成。但是,我在文档中没有看到任何建议可以执行此操作的功能。有任何想法吗?
最佳答案
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等之后开始。如果任务的任何执行遇到异常,则将禁止后续执行。否则,任务将仅通过取消或终止执行程序而终止。如果此任务的任何执行花费的时间超过其时间,则后续执行可能会开始得很晚,但不会同时执行。
关于java - 如何中断ScheduledExecutorService,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45439694/