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

问题描述 投票:0回答:1

我正在编写分布式计数器网络,我使用ScheduledExecutorService类中的scheduleAtFixedRate在网络中的计算机之间发送数据包,并在经过synPeriod时在每台计算机上打印计数器的当前值。当我输入命令“set period [value]”时,应在[value]上更改scheduleAtFixedRate的周期。我更新了期间变量的值,但是它不会影响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会很有用,它可以工作!

java counter scheduledexecutorservice
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.