Якщо я збираюся зателефонувати, щоб 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())