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)
Respuestas:
TimeUnit.SECONDS.sleep(x)
llamará Thread.sleep
. La única diferencia es la legibilidad y el uso TimeUnit
probablemente 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);
}
}
public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);
. Esto permite, Thread.sleep()
pero mantiene la ventaja de legibilidad de TimeUnit
.
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
.
SECONDS
o MILLISECONDS
[:-)
SECONDS
, pero seguro que es cuestión de gustos. Por otro lado, tenga en cuenta que el método sleep()
está activado, static
por Thread
lo que se podría argumentar que no está claro qué hilo se supone que debe dormir (¿qué Thread myThread = ...; myThread.sleep()
significa?)
Thread.sleep(3, TimeUnit.SECONDS)
Thread.sleep(Duration.ofSeconds(s).toMillis())