我正在编写分布式计数器网络,我使用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会很有用,它可以工作!
您必须取消该任务并使用所需的值重新安排它