Java 如何中断ScheduledExecutorService

Java 如何中断ScheduledExecutorService,java,scheduledexecutorservice,Java,Scheduledexecutorservice,我有一个ScheduledExecutorService,我正在使用它每一分钟运行一个方法updateIndex()。但是,如果在上一次刷新和下一次刷新之间的一分钟内对资源进行了更改,我希望立即调用updateIndex(),然后让executor服务恢复其正常计划;i、 e.下一次更新将在一分钟内进行。然而,我在文档中没有看到任何东西表明有能力做到这一点。有什么想法吗 public static void updateIndex() { Runnable runnable =

我有一个
ScheduledExecutorService
,我正在使用它每一分钟运行一个方法
updateIndex()
。但是,如果在上一次刷新和下一次刷新之间的一分钟内对资源进行了更改,我希望立即调用
updateIndex()
,然后让executor服务恢复其正常计划;i、 e.下一次更新将在一分钟内进行。然而,我在文档中没有看到任何东西表明有能力做到这一点。有什么想法吗

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,依此类推。如果任务的任何执行遇到异常,则会抑制后续执行。否则,任务将仅通过取消或终止执行者而终止。如果此任务的任何执行时间超过其周期,则后续执行可能会延迟开始,但不会同时执行。

scheduleAtFixedRate()
返回一个包含您正在寻找的
cancel
方法的值。

因此无法“中断”执行器在执行Runnable命令之间等待一段时间?您可以使用ScheduledExecuter ScheduledFuture scheduler=scheduledExecutor.schedule(()->yourlogicmethod();DateTime currentTime=new DateTime();currentTime=currentTime.plus(scheduler.getDelay(TimeUnit.毫秒))中断Runnable命令;