Search code examples
javasleep

Thread.sleep vs. TimeUnit.SECONDS.sleep


If I'm going to have a call to have a Java Thread go to sleep, is there a reason to prefer one of these forms over the other?

Thread.sleep(x)

or

TimeUnit.SECONDS.sleep(y)

Solution

  • TimeUnit.SECONDS.sleep(x) will call Thread.sleep after validating that the timeout is positive. This means that as opposed to Thread.sleep, an IllegalArgumentException will not be thrown when the timeout is negative.

    Other than that, the only difference is readability and using TimeUnit is probably easier to understand for non-obvious durations (for example: Thread.sleep(180000) vs. TimeUnit.MINUTES.sleep(3)).

    For reference, see below the code of sleep() in TimeUnit:

    public void sleep(long timeout) throws InterruptedException {
        if (timeout > 0) {
            long ms = toMillis(timeout);
            int ns = excessNanos(timeout, ms);
            Thread.sleep(ms, ns);
        }
    }