如何在程序 运行 时更改 scheduleAtFixedRate 的周期值

How to change value of period for scheduleAtFixedRate when program is running

我正在编写分布式计数器网络,我使用 ScheduledExecutorService class 中的 scheduleAtFixedRate 在网络中的计算机之间发送数据包,并在经过时在每台计算机上打印计数器的当前值 synPeriod。 当我键入命令 "set period [value]" 时,scheduleAtFixedRate 的周期应该在 [value] 上更改。我更新了周期变量的值,但它不会影响 scheduleAtFixedRate 中的周期。是否有可能在它工作时更改值?或者有什么方法可以停止执行程序,然后用另一个句点再次调用它?

Runnable printer = () -> {
        try
        {
            //send packet with value of counter
            Thread.sleep(200);
        }
        catch (IOException e)
        {
        }
        catch (InterruptedException e)
        {
        }
        System.out.println("Counter value: " + counter);
    };
ScheduledExecutorService printerExecutor = Executors.newScheduledThreadPool(1);
    printerExecutor.scheduleAtFixedRate(printer, synPeriod, synPeriod, TimeUnit.SECONDS);

编辑: 我读过 ScheduledFuture 会很有用并且有效!

您必须取消任务并使用所需值重新安排它