2012-03-06 12 views

Odpowiedz

78

TimeUnit.SECONDS.sleep(x) wezwie Thread.sleep. Jedyną różnicą jest czytelność i użycie TimeUnit jest prawdopodobnie łatwiejsze do zrozumienia w nieoczywistych czasach (na przykład: Thread.sleep(180000) vs. TimeUnit.MINUTES.sleep(3)).

Dla porównania, patrz poniżej kodu sleep() w 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: Selen projekt ma metodę Sleeper, który nie wymaga połowu wyjątek podczas używania go: https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/browserlaunchers /Sleeper.html – djangofan

+0

Zgadzam się. Jeśli chcesz zadeklarować swój czas snu jako stałą, którą możesz zmienić później, powiedzmy, od 1 minuty do 10 sekund, jednym rozwiązaniem jest 'public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis (1);'. Pozwala to na 'Thread.sleep()', ale zachowuje przewagę czytelności 'TimeUnit'. –

7

Są takie same. Ja wolę to drugie, ponieważ jest bardziej opisowy i pozwala wybrać jednostkę czasu (patrz TimeUnit): DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS.

+4

Argumentacja: wolę pierwszą - chcę wątek do spania, a nie "SECONDS" lub "MILLISECONDS' [:-) –

+2

@ CollosHeuberger: cóż, możesz przeczytać to jako * spać za x" SECONDS' *, ale z pewnością to kwestia gustu. Z drugiej strony zauważ, że 'sleep()' jest 'statyczną' metodą na' Thread' - więc można by argumentować, że nie jest jasne, który wątek ma spać (co robi 'Thread myThread = ...; myThread .sleep() "znaczy?) –

+3

@CarlosHeuberger Byłoby znacznie lepiej, aby móc napisać' Thread.sleep (3, TimeUnit.SECONDS) ' – assylias

Powiązane problemy