Якщо я збираюся зателефонувати, щоб Java Thread заснула, чи є причина віддати перевагу одній із цих форм перед іншою?
Thread.sleep(x)
або
TimeUnit.SECONDS.sleep(y)
Відповіді:
TimeUnit.SECONDS.sleep(x)зателефонує Thread.sleep. Єдина відмінність - читабельність, і використання TimeUnit, мабуть, легше зрозуміти при неочевидних тривалостях (наприклад: Thread.sleep(180000)проти TimeUnit.MINUTES.sleep(3)).
Для довідки див. Нижче код sleep()в 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);. Це дозволяє, Thread.sleep()але підтримує перевагу читабельності TimeUnit.
Вони однакові. Я віддаю перевагу останній , тому що це більш описовий характер і дозволяє вибрати одиницю часу (див TimeUnit): DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS.
SECONDSабо MILLISECONDS[:-)
SECONDS , але, безумовно, це справа смаку. З іншого боку, зауважте, що sleep()це staticметод, Threadтому можна стверджувати, що незрозуміло, яка нитка передбачається спати (що Thread myThread = ...; myThread.sleep()означає?)
Thread.sleep(3, TimeUnit.SECONDS)
Thread.sleep(Duration.ofSeconds(s).toMillis())