Search code examples
javamultithreadingvaadinsleepthread-sleep

Thread.sleep() isn't pausing execution


I'm trying to limit attempts of a process in a loop to 60 seconds by sleeping for 3,000ms per loop with 20 attempts. Calling Thread.sleep() isn't actually pausing execution in the thread that's running and instead, all 20 attempts happen rapidly in succession.

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();
}

Since this is all happening inside of a Vaadin application, I'm assuming the wrong Thread is being put to sleep but I'm not sure how to target a specific thread for sleeping.

Thanks in advance


Solution

  • Are you sure the code inside the if is being run? The condition on the while is different (+toLowerCase). Thread.sleep() always causes the current thread to sleep.