如何在程序 运行 时更改 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 会很有用并且有效!
您必须取消任务并使用所需值重新安排它
我正在编写分布式计数器网络,我使用 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 会很有用并且有效!
您必须取消任务并使用所需值重新安排它