Thread.sleep frente a TimeUnit.SECONDS.sleep


91

Si voy a tener una llamada para que un Java Thread se suspenda, ¿hay alguna razón para preferir una de estas formas sobre la otra?

Thread.sleep(x)

o

TimeUnit.SECONDS.sleep(y)

1
Otra opción esThread.sleep(Duration.ofSeconds(s).toMillis())
cambunctious

Respuestas:


126

TimeUnit.SECONDS.sleep(x)llamará Thread.sleep. La única diferencia es la legibilidad y el uso TimeUnitprobablemente sea más fácil de entender para duraciones no obvias (por ejemplo: Thread.sleep(180000)vs.TimeUnit.MINUTES.sleep(3) ).

Para referencia, vea a continuación 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);
    }
}

FYI: El proyecto Selenium tiene un método Sleeper que no requiere capturar una excepción cuando se usa: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/…
djangofan

1
Estoy de acuerdo. Si desea declarar su tiempo de sueño como una constante que puede cambiar más tarde, digamos, de 1 minuto a 10 segundos, una solución es public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);. Esto permite, Thread.sleep()pero mantiene la ventaja de legibilidad de TimeUnit.
Ole VV

8

Ellos son iguales. 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.


5
argumentativo: prefiero el primero - quiero que el hilo duerma, no el SECONDSo MILLISECONDS[:-)
user85421

3
@CarlosHeuberger: bueno, puedes leerlo como sueño para xSECONDS , pero seguro que es cuestión de gustos. Por otro lado, tenga en cuenta que el método sleep()está activado, staticpor Threadlo que se podría argumentar que no está claro qué hilo se supone que debe dormir (¿qué Thread myThread = ...; myThread.sleep()significa?)
Tomasz Nurkiewicz

6
@CarlosHeuberger Sería mucho mejor poder escribirThread.sleep(3, TimeUnit.SECONDS)
assylias

Actualizado para eliminar cualquier confusión acerca de la equivalencia debido a las unidades elegidas
Rachel

@assylias Estoy de acuerdo, pero desafortunadamente no puedo cambiarlo [: - |
user85421
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.