Jeśli mam wywołać wątek Java, to idź spać, czy istnieje powód, aby preferować jeden z tych formularzy nad drugim?Thread.sleep vs. TimeUnit.SECONDS.sleep
Thread.sleep(x)
lub
TimeUnit.SECONDS.sleep(y)
Jeśli mam wywołać wątek Java, to idź spać, czy istnieje powód, aby preferować jeden z tych formularzy nad drugim?Thread.sleep vs. TimeUnit.SECONDS.sleep
Thread.sleep(x)
lub
TimeUnit.SECONDS.sleep(y)
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);
}
}
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
.
Argumentacja: wolę pierwszą - chcę wątek do spania, a nie "SECONDS" lub "MILLISECONDS' [:-) –
@ 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?) –
@CarlosHeuberger Byłoby znacznie lepiej, aby móc napisać' Thread.sleep (3, TimeUnit.SECONDS) ' – assylias
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
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'. –