Является ли 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
, В случае, если вы получите ответ раньше, вы можете отменить эту задачу и повторно отправить с новой задержкой.
Так что я бы так (псевдокод):
- проверка ответа по расписанию для запуска после
checkInterval
- Обработка ответа
- Если задача проверки еще не завершена, отмените ее, обновите
lastRTime
и перенести (пункт 1)
Если задание проверки сработало, перенесите его заново.
Таким образом вы пропускаете период ожидания между отметкой времени между lastRTime и Thread.sleep().