Я пытаюсь ограничить попытки процесса в цикле до 60 секунд, засыпая на 3000 мс на цикл с 20 попытками. Вызов Thread.sleep() на самом деле не приостанавливает выполнение в запущенном потоке, вместо этого все 20 попыток происходят быстро друг за другом.
private void pollWebServiceForToken() {
final int pollInterval = 3000;
new Thread() {
@Override
public void run() {
int attempts = 0;
int maxAttempts = 60;
String token;
do {
token = requestToken(exchangeCode);
if (token.contains(FAILED)) {
try {
Thread.sleep(pollingInterval);
} catch (InterruptedException ex) {
this.currentThread().interrupt();
}
}
attempts++;
} while (token.toLowerCase().contains(FAILED) && attempts < maxAttempts && !cancelled);
}
}.start();
}
Поскольку все это происходит внутри приложения Vaadin, я предполагаю, что неправильный поток усыпляется, но я не уверен, как нацелить конкретный поток на спящий режим.
заранее спасибо
InterruptedException
? - person user207421   schedule 24.05.2016InterruptedException
в потоке, вы должны прервать любую обработку и позволить потоку завершиться. Добавлениеbreak;
в конце блокаcatch
поможет. Не имеет отношения к вашей проблеме, просто лучшая практика. - person dimo414   schedule 24.05.2016