Thread.sleep () в цикле while

Я заметил, что NetBeans предупреждает меня об использовании Thread.sleep () в цикле while в моем Java-коде, поэтому я провел небольшое исследование на эту тему. . Похоже, что в первую очередь проблема связана с производительностью, когда ваше условие while может стать истинным, пока счетчик все еще спит, тем самым тратя время настенных часов, пока вы ждете следующей итерации. Все это имеет смысл.

Моему приложению необходимо связаться с удаленной системой и периодически опрашивать состояние операции, ожидая завершения операции перед отправкой следующего запроса. В настоящий момент код логически делает следующее:

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-сообщение, получить ответ, проанализировать его и затем извлечь нужную мне информацию.

Любые предложения или комментарии приветствуются.

21
задан Steve Ferguson 9 January 2012 в 17:46
поделиться