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
.
SECONDS
o MILLISECONDS
[:-)
SECONDS
, ma sicuramente è una questione di gusti. D'altra parte, nota che sleep()
è il static
metodo 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())