Thread.sleep() не приостанавливает выполнение

Я пытаюсь ограничить попытки процесса в цикле до 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, я предполагаю, что неправильный поток усыпляется, но я не уверен, как нацелить конкретный поток на спящий режим.

заранее спасибо


person Mike Medina    schedule 24.05.2016    source источник
comment
Происходит ли InterruptedException?   -  person Buddy    schedule 24.05.2016
comment
Нет, все 20 попыток прогоняет почти моментально =/   -  person Mike Medina    schedule 24.05.2016
comment
Какой смысл прерывать текущий поток в обработчике InterruptedException?   -  person user207421    schedule 24.05.2016
comment
Как правило, когда вы видите InterruptedException в потоке, вы должны прервать любую обработку и позволить потоку завершиться. Добавление break; в конце блока catch поможет. Не имеет отношения к вашей проблеме, просто лучшая практика.   -  person dimo414    schedule 24.05.2016
comment
Спасибо, парни. Это первый раз, когда мне пришлось что-то вешать, поэтому есть еще нюансы, которые мне нужно понять =)   -  person Mike Medina    schedule 25.05.2016


Ответы (1)


Вы уверены, что код внутри if выполняется? Условие в то время отличается (+toLowerCase). Thread.sleep() всегда заставляет текущий поток спать.

person Hilario Fernandes    schedule 24.05.2016
comment
Йикс, это неловко. Спасибо, что сэкономили мне еще час из-за такой глупой оплошности! - person Mike Medina; 24.05.2016