Java - запускать задания в разные промежутки времени - PullRequest
1 голос
/ 14 апреля 2020

Этот вопрос относится к заданию колледжа.
Я хочу запускать блок кода каждые n * 2 секунды (например, подождать 1 секунду, запустить и подождать 2 секунды, запустить и подождать 4 секунды, запустить, et c) до 5 раз.

В настоящее время у меня есть что-то подобное.

int timer = 1000;
int tryCounter = 0;

while( !condition()  && counter < 5){
  doTask();
  Thread.sleep(timer);
  timer *= 2;
  counter++;
}

Хотя это работает, моя оценка выигрывает от использования Thread.sleep(). Я понял, что использование ScheduledThreadPoolExecutor с фиксированной ставкой может быть одним из способов go, но я не могу заставить его работать из-за того, что интервал на самом деле не фиксирован.

Это для теоретического Распределенная система с высокими возможностями параллелизма, поэтому важна высокая масштабируемость.

Я мог бы обойтись без Thread.sleep(), если бы на самом деле не было никакой выгоды или жизнеспособного способа сделать это, написав это в своем отчете. Так у кого-нибудь есть понимание этого?

1 Ответ

0 голосов
/ 14 апреля 2020

Можно планировать задачи с помощью ScheduledExecutorService в сочетании с некоторыми логами c. Аргумент .schedule позволяет указать единицу времени для использования. Вы можете объявить переменную, которая может обрабатывать приращение, которое вы пытаетесь сделать.

int timer = 1000;
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
    Runnable runnable = new Runnable() {
        public void run()
        {
           //Move your code you want to implement here
        }
    };
    //Increment your variable
    while(!condition()) {
        for(int i = 0; i < 5; i++) {
            service.schedule(runnable, timer, TimeUnit.SECOND);
            timer *= 2;
        }
    }

Перемещение выполнения кода в пределах исполняемого блока, а затем планирование его в течение l oop, где увеличивается таймер, должно достигать sh ожидаемого эффекта. Надеюсь, это поможет!

...