Как изменить значение периода для scheduleAtFixedRate при запуске программы
Я пишу распределенную сеть счетчиков и использую scheduleAtFixedRate из класса ScheduledExecutorService для отправки пакетов между компьютерами в сети и печати текущего значения счетчика на каждом компьютере по истечении synPeriod. Когда я набираю команду "установить период [значение]", период 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 будет полезно, и это работает!
1 ответ
Решение
Вы должны отменить задачу и перенести ее с требуемым значением