2012-03-06 65 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