Как изменить значение периода для 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 ответ

Решение

Вы должны отменить задачу и перенести ее с требуемым значением

Другие вопросы по тегам