Si voy a tener una llamada para que Java Thread se vaya a dormir, ¿hay alguna razón para preferir una de estas formas sobre la otra?Thread.sleep vs. TimeUnit.SECONDS.sleep
Thread.sleep(x)
o
TimeUnit.SECONDS.sleep(y)
Si voy a tener una llamada para que Java Thread se vaya a dormir, ¿hay alguna razón para preferir una de estas formas sobre la otra?Thread.sleep vs. TimeUnit.SECONDS.sleep
Thread.sleep(x)
o
TimeUnit.SECONDS.sleep(y)
TimeUnit.SECONDS.sleep(x)
llamarán Thread.sleep
. La única diferencia es la legibilidad y el uso de TimeUnit
es probablemente más fácil de entender para duraciones no obvias (por ejemplo: Thread.sleep(180000)
frente a TimeUnit.MINUTES.sleep(3)
).
Como referencia, ver más abajo el código de sleep()
en TimeUnit
:
public void sleep(long timeout) throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
Thread.sleep(ms, ns);
}
}
Ellos son los mismos. Yo prefiero este último porque es más descriptivo y permite elegir la unidad de tiempo (ver TimeUnit
): DAYS
, HOURS
, MICROSECONDS
, MILLISECONDS
, MINUTES
, NANOSECONDS
, SECONDS
.
argumentativo: Prefiero el primero - Quiero el hilo para dormir, no los 'SECONDS' o' MILLISECONDS' [:-) –
@CarlosHeuberger: bueno, puedes leerlo como * sleep for x 'SECONDS' *, pero seguramente es una cuestión de gusto Por otro lado, tenga en cuenta que 'sleep()' es el método 'static' en' Thread', por lo que podría argumentarse que no está claro qué hilo se supone que duerme (lo que hace 'Thread myThread = ...; myThread .sleep() '¿quiere decir?) –
@CarlosHeuberger Sería mucho mejor poder escribir' Thread.sleep (3, TimeUnit.SECONDS) ' – assylias
FYI: El proyecto Selenium tiene un método Sleeper que no requiere capturar una excepción al usarlo: https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/browserlaunchers /Sleeper.html – djangofan
Estoy de acuerdo. Si desea declarar su tiempo de sueño como una constante que puede cambiar más tarde, por ejemplo, de 1 minuto a 10 segundos, una solución es 'pública estática final larga SLEEPING_TIME = TimeUnit.MINUTES.toMillis (1);'. Esto permite 'Thread.sleep()' pero mantiene la ventaja de legibilidad de 'TimeUnit'. –