Reputation: 2241
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
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
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