java Thread.sleep与TimeUnit.SECONDS.sleep

eyh26e7m  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(219)

如果我要调用一个Java线程进入睡眠状态,有没有理由选择其中一种形式?

Thread.sleep(x)

TimeUnit.SECONDS.sleep(y)
0pizxfdo

0pizxfdo1#

TimeUnit.SECONDS.sleep(x)将在验证超时为正之后调用Thread.sleep。这意味着与Thread.sleep相反,当超时为负时,IllegalArgumentException被抛出。
除此之外,唯一的区别是可读性,使用TimeUnit可能更容易理解不明显的持续时间(例如:Thread.sleep(180000)TimeUnit.MINUTES.sleep(3))。
参考下面TimeUnitsleep()的代码:

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

w9apscun2#

它们是相同的。我更喜欢后者,因为它更具描述性,并允许选择时间单位(参见TimeUnit):DAYSHOURSMICROSECONDSMILLISECONDSMINUTESNANOSECONDSSECONDS

相关问题