如果我打算让一个Java线程进入睡眠状态,是否有理由偏好其中一种形式而不是另一种?
Thread.sleep(x)
或
TimeUnit.SECONDS.sleep(y)
答案 0 :(得分:101)
TimeUnit.SECONDS.sleep(x)
会致电Thread.sleep
。
唯一的区别是可读性,使用TimeUnit
可能更容易理解非显而易见的持续时间(例如:Thread.sleep(180000)
与TimeUnit.MINUTES.sleep(3)
)。
供参考,请参阅以下sleep()
中TimeUnit
的代码:
public void sleep(long timeout) throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
Thread.sleep(ms, ns);
}
}
答案 1 :(得分:7)
他们是一样的。我更喜欢后者,因为它更具描述性,允许选择时间单位(请参阅TimeUnit
):DAYS
,HOURS
,MICROSECONDS
,MILLISECONDS
,{{ 1}},MINUTES
,NANOSECONDS
。