如果我打算让Java线程进入睡眠状态,是否有理由选择其中一种形式?Thread.sleep与TimeUnit.SECONDS.sleep
Thread.sleep(x)
或
TimeUnit.SECONDS.sleep(y)
如果我打算让Java线程进入睡眠状态,是否有理由选择其中一种形式?Thread.sleep与TimeUnit.SECONDS.sleep
Thread.sleep(x)
或
TimeUnit.SECONDS.sleep(y)
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);
}
}
他们是相同的。我更喜欢后者,因为它是更具描述性的,并允许选择时间单位(见TimeUnit
):DAYS
,HOURS
,MICROSECONDS
,MILLISECONDS
,MINUTES
,NANOSECONDS
,SECONDS
。
议论:我更喜欢第一个 - 我想让线程进入睡眠状态,而不是'SECONDS'或者'MILLISECONDS' [:-) – 2012-03-06 16:31:21
@CarlosHeuberger:好的,你可以把它当作* sleep来读取* SECONDS' *,但是肯定的这是一个品味问题。另一方面,请注意'sleep()'是'Thread'上的'static'方法 - 所以有人可能会争辩说,不清楚哪个线程应该睡眠(Thread ThreadThread = ...; myThread .sleep()'是什么意思?) – 2012-03-06 16:34:29
@CarlosHeuberger能够写出'Thread.sleep(3,TimeUnit.SECONDS)'会更好' – assylias 2012-03-06 16:34:31
FYI:Selenium项目有一个Sleeper方法,在使用它时不需要捕获异常:https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/browserlaunchers /Sleeper.html – djangofan 2015-07-13 19:07:32
我同意。如果你想声明你的睡眠时间是一个你可以稍后改变的常量,例如1分钟到10秒,一个解决方案是'public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);'。这允许'Thread.sleep()',但保持'TimeUnit'的可读性优势。 – 2017-02-23 21:36:05