Является ли Thread.sleep лучше, чем постоянно проверять, выполняется ли условие?

Я хочу, чтобы эта программа работала до бесконечности, и я не уверен, что это лучший способ увеличить эффективность процессора и памяти. Я создал поток, который обрабатывает ответы от сервера, эти ответы будут возвращаться каждые 20 секунд или около того. Тем не менее, я должен убедиться, что сервер все еще отправляет ответы, в противном случае я должен получить ответы от нового сервера. Каждый раз, когда возвращается ответ, текущее системное время сохраняется в "lastRTime". Есть ли лучшая альтернатива Thread.sleep() здесь? Это в конце моей основной темы.

while(true) {
    Thread.sleep(checkInterval);
        if (System.currentTimeMillis()-lastRTime > timeDiffThreshold) {
            pmsi.beginClose();    //Close the current connection
            makeConnection(backupHost,backupPort);
        }
    }
}

Было бы лучше просто не спать?

1 ответ

Решение

Я думаю, что лучшая альтернатива (но не обязательная) должна использовать ScheduledExecutor и отправьте свою проверку для запуска после checkInterval, В случае, если вы получите ответ раньше, вы можете отменить эту задачу и повторно отправить с новой задержкой.

Так что я бы так (псевдокод):

  1. проверка ответа по расписанию для запуска после checkInterval
  2. Обработка ответа
  3. Если задача проверки еще не завершена, отмените ее, обновите lastRTimeи перенести (пункт 1)

Если задание проверки сработало, перенесите его заново.

Таким образом вы пропускаете период ожидания между отметкой времени между lastRTime и Thread.sleep().

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