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.
SECONDSou MILLISECONDS[:-)
SECONDS , mas com certeza é uma questão de gosto. Por outro lado, observe que o método sleep()está staticativado 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())