如果我要调用一个Java线程进入睡眠状态,有没有理由选择其中一种形式?
Thread.sleep(x)
或
TimeUnit.SECONDS.sleep(y)
0pizxfdo1#
TimeUnit.SECONDS.sleep(x)将在验证超时为正之后调用Thread.sleep。这意味着与Thread.sleep相反,当超时为负时,IllegalArgumentException将不被抛出。除此之外,唯一的区别是可读性,使用TimeUnit可能更容易理解不明显的持续时间(例如:Thread.sleep(180000)与TimeUnit.MINUTES.sleep(3))。参考下面TimeUnit中sleep()的代码:
TimeUnit.SECONDS.sleep(x)
Thread.sleep
IllegalArgumentException
TimeUnit
Thread.sleep(180000)
TimeUnit.MINUTES.sleep(3)
sleep()
public void sleep(long timeout) throws InterruptedException { if (timeout > 0) { long ms = toMillis(timeout); int ns = excessNanos(timeout, ms); Thread.sleep(ms, ns); } }
w9apscun2#
它们是相同的。我更喜欢后者,因为它更具描述性,并允许选择时间单位(参见TimeUnit):DAYS、HOURS、MICROSECONDS、MILLISECONDS、MINUTES、NANOSECONDS、SECONDS。
DAYS
HOURS
MICROSECONDS
MILLISECONDS
MINUTES
NANOSECONDS
SECONDS
2条答案
按热度按时间0pizxfdo1#
TimeUnit.SECONDS.sleep(x)
将在验证超时为正之后调用Thread.sleep
。这意味着与Thread.sleep
相反,当超时为负时,IllegalArgumentException
将不被抛出。除此之外,唯一的区别是可读性,使用
TimeUnit
可能更容易理解不明显的持续时间(例如:Thread.sleep(180000)
与TimeUnit.MINUTES.sleep(3)
)。参考下面
TimeUnit
中sleep()
的代码:w9apscun2#
它们是相同的。我更喜欢后者,因为它更具描述性,并允许选择时间单位(参见
TimeUnit
):DAYS
、HOURS
、MICROSECONDS
、MILLISECONDS
、MINUTES
、NANOSECONDS
、SECONDS
。