Se eu vou ter uma chamada para que um Java Thread entre no modo de espera, há um motivo para preferir um desses formulários em vez do outro?
Thread.sleep(x)
ou
TimeUnit.SECONDS.sleep(y)
Respostas:
TimeUnit.SECONDS.sleep(x)
vai ligar Thread.sleep
. A única diferença é a legibilidade e o uso TimeUnit
é provavelmente mais fácil de entender para durações não óbvias (por exemplo: Thread.sleep(180000)
vs. TimeUnit.MINUTES.sleep(3)
).
Para referência, veja abaixo o código de sleep()
em 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);
. Isso permite, Thread.sleep()
mas mantém a vantagem de legibilidade de TimeUnit
.
Eles são os mesmos. Eu prefiro o último porque é mais descritivo e permite escolher unidade de tempo (ver TimeUnit
): DAYS
, HOURS
, MICROSECONDS
, MILLISECONDS
, MINUTES
, NANOSECONDS
, SECONDS
.
SECONDS
ou MILLISECONDS
[:-)
SECONDS
, mas com certeza é uma questão de gosto. Por outro lado, observe que o método sleep()
está static
ativado Thread
- então pode-se argumentar que não está claro qual fio deve dormir (o que Thread myThread = ...; myThread.sleep()
significa?)
Thread.sleep(3, TimeUnit.SECONDS)
Thread.sleep(Duration.ofSeconds(s).toMillis())