Я замечаю, что NetBeans предупреждает меня об использовании Thread.sleep() в цикле while в моем Java-коде, поэтому я провел некоторое исследование по этому вопросу. Кажется, прежде всего проблема заключается в производительности, когда ваше состояние может стать истинным, пока счетчик все еще спит, тем самым теряя время настенных часов, пока вы ждете следующей итерации. Все это имеет смысл.
Моему приложению необходимо связаться с удаленной системой и периодически опросить состояние операции, ожидая завершения операции до отправки следующего запроса. В настоящий момент код логически делает это:
String state = get state via RPC call
while (!state.equals("complete")) {
Thread.sleep(10000); // Wait 10 seconds
state = {update state via RPC call}
}
Учитывая, что обстоятельство проверяет удаленную операцию (что несколько дорогой процесс, поскольку он работает в течение нескольких секунд), является ли это допустимым использованием Thread.sleep() в цикле while? Есть ли лучший способ структурировать эту логику? Я видел несколько примеров, где я мог бы использовать класс Timer, но я не вижу преимущества, поскольку он все еще, похоже, сводится к одной и той же простой логике выше, но с гораздо большей сложностью.
Имейте в виду, что удаленная система в этом случае не находится под моим прямым контролем и не написана на Java, поэтому изменение этого конца для более "совместного" в этом сценарии не является вариантом. Моя единственная опция для обновления значения моего приложения для состояния - создавать и отправлять XML-сообщение, получать ответ, анализировать его и извлекать часть необходимой мне информации.
Любые предложения или комментарии будут наиболее желанными.