2012-03-06 71 views

回答

78

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); 
    } 
} 
+0

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

+0

我同意。如果你想声明你的睡眠时间是一个你可以稍后改变的常量,例如1分钟到10秒,一个解决方案是'public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);'。这允许'Thread.sleep()',但保持'TimeUnit'的可读性优势。 – 2017-02-23 21:36:05

7

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

+4

议论:我更喜欢第一个 - 我想让线程进入睡眠状态,而不是'SECONDS'或者'MILLISECONDS' [:-) – 2012-03-06 16:31:21

+2

@CarlosHeuberger:好的,你可以把它当作* sleep来读取* SECONDS' *,但是肯定的这是一个品味问题。另一方面,请注意'sleep()'是'Thread'上的'static'方法 - 所以有人可能会争辩说,不清楚哪个线程应该睡眠(Thread ThreadThread = ...; myThread .sleep()'是什么意思?) – 2012-03-06 16:34:29

+3

@CarlosHeuberger能够写出'Thread.sleep(3,TimeUnit.SECONDS)'会更好' – assylias 2012-03-06 16:34:31