Rachel
Rachel

Reputation: 2241

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)

Upvotes: 122

Views: 116896

Answers (2)

assylias
assylias

Reputation: 328735

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

Upvotes: 170

Tomasz Nurkiewicz
Tomasz Nurkiewicz

Reputation: 340883

They are the same. I prefer the latter because it is more descriptive and allows to choose time unit (see TimeUnit): DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS.

Upvotes: 17

Related Questions