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 TimeUnitest 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.
SECONDSou MILLISECONDS[:-)
SECONDS , mais c'est sûrement une question de goût. D'autre part, notez que la méthode sleep()est staticactivé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())