Se avrò una chiamata per far dormire un thread Java, c'è un motivo per preferire una di queste forme rispetto all'altra?
Thread.sleep(x)
o
TimeUnit.SECONDS.sleep(y)
Risposte:
TimeUnit.SECONDS.sleep(x)chiamerà Thread.sleep. L'unica differenza è la leggibilità e l'utilizzo TimeUnitè probabilmente più facile da capire per durate non ovvie (ad esempio: Thread.sleep(180000)vs.TimeUnit.MINUTES.sleep(3) ).
Per riferimento, vedere di seguito il codice di sleep()in 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);. Ciò consente Thread.sleep()ma mantiene il vantaggio di leggibilità di TimeUnit.
Loro sono la stessa cosa. Io preferisco il secondo perché è più descrittivo e permette di scegliere l'unità di tempo (vedi TimeUnit): DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS.
SECONDSo MILLISECONDS[:-)
SECONDS , ma sicuramente è una questione di gusti. D'altra parte, nota che sleep()è il staticmetodo Thread- quindi si potrebbe sostenere che non è chiaro quale thread si supponga di dormire (cosa Thread myThread = ...; myThread.sleep()significa?)
Thread.sleep(3, TimeUnit.SECONDS)
Thread.sleep(Duration.ofSeconds(s).toMillis())