Si je vais avoir un appel pour faire dormir un thread Java, y a-t-il une raison de préférer l'une de ces formes à l'autre?
Thread.sleep(x)
ou
TimeUnit.SECONDS.sleep(y)
Réponses:
TimeUnit.SECONDS.sleep(x)
appellera Thread.sleep
. La seule différence est la lisibilité et l'utilisation TimeUnit
est probablement plus facile à comprendre pour des durées non évidentes (par exemple: Thread.sleep(180000)
vs. TimeUnit.MINUTES.sleep(3)
).
Pour référence, voir ci-dessous le code de sleep()
dans 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);
. Cela permet Thread.sleep()
mais maintient l'avantage de lisibilité de TimeUnit
.
Ce sont les mêmes. Je préfère cette dernière car il est plus descriptif et permet de choisir l' unité de temps (voir TimeUnit
): DAYS
, HOURS
, MICROSECONDS
, MILLISECONDS
, MINUTES
, NANOSECONDS
, SECONDS
.
SECONDS
ou MILLISECONDS
[:-)
SECONDS
, mais c'est sûrement une question de goût. D'autre part, notez que la méthode sleep()
est static
activée Thread
- on pourrait donc dire qu'il n'est pas clair quel fil est censé dormir (qu'est-ce que cela Thread myThread = ...; myThread.sleep()
signifie?)
Thread.sleep(3, TimeUnit.SECONDS)
Thread.sleep(Duration.ofSeconds(s).toMillis())