2012-03-06 19 views

Respuesta

78

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

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

+0

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'. –

7

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.

+4

argumentativo: Prefiero el primero - Quiero el hilo para dormir, no los 'SECONDS' o' MILLISECONDS' [:-) –

+2

@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?) –

+3

@CarlosHeuberger Sería mucho mejor poder escribir' Thread.sleep (3, TimeUnit.SECONDS) ' – assylias

Cuestiones relacionadas