Jeśli mam zadzwonić, aby uśpić wątek Java, czy jest powód, aby preferować jedną z tych form nad drugą?
Thread.sleep(x)
lub
TimeUnit.SECONDS.sleep(y)
Odpowiedzi:
TimeUnit.SECONDS.sleep(x)
zadzwoni Thread.sleep
. Jedyną różnicą jest czytelność, a użycie TimeUnit
jest prawdopodobnie łatwiejsze do zrozumienia w przypadku nieoczywistych czasów (na przykład: Thread.sleep(180000)
vs. TimeUnit.MINUTES.sleep(3)
).
Dla odniesienia, zobacz poniżej kod sleep()
w 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);
. Umożliwia to, Thread.sleep()
ale zachowuje przewagę czytelności TimeUnit
.
Oni są tacy sami. Wolę ten ostatni, ponieważ jest bardziej opisowy i pozwala wybrać jednostkę czasu (patrz TimeUnit
): DAYS
, HOURS
, MICROSECONDS
, MILLISECONDS
, MINUTES
, NANOSECONDS
, SECONDS
.
SECONDS
lub MILLISECONDS
[:-)
SECONDS
, ale na pewno jest to kwestia gustu. Z drugiej strony uwaga, że sleep()
jest static
metoda włączona Thread
- można więc argumentować, że nie jest jasne, który wątek ma spać (co to Thread myThread = ...; myThread.sleep()
znaczy?)
Thread.sleep(3, TimeUnit.SECONDS)
Thread.sleep(Duration.ofSeconds(s).toMillis())