Если мне нужно, чтобы поток Java перешел в режим сна, есть ли причина предпочесть одну из этих форм другой?
Thread.sleep(x)
или
TimeUnit.SECONDS.sleep(y)
Ответы:
TimeUnit.SECONDS.sleep(x)
позвоню Thread.sleep
. Единственная разница - удобочитаемость, и использование TimeUnit
, вероятно, легче понять для неочевидных промежутков времени (например: Thread.sleep(180000)
vs. TimeUnit.MINUTES.sleep(3)
).
Для справки см. Ниже код sleep()
in 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
or MILLISECONDS
[:-)
SECONDS
, но, конечно же, это дело вкуса. С другой стороны, отмечают , что sleep()
это static
метод по Thread
- так можно было бы утверждать , что это не ясно , какой поток предполагают спать (что делает Thread myThread = ...; myThread.sleep()
средний?)
Thread.sleep(3, TimeUnit.SECONDS)
Thread.sleep(Duration.ofSeconds(s).toMillis())