Thread.sleep против TimeUnit.SECONDS.sleep


91

Если мне нужно, чтобы поток Java перешел в режим сна, есть ли причина предпочесть одну из этих форм другой?

Thread.sleep(x)

или

TimeUnit.SECONDS.sleep(y)

1
Другой вариантThread.sleep(Duration.ofSeconds(s).toMillis())
— грубоватый

Ответы:


126

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);
    }
}

К вашему сведению: в проекте Selenium есть метод Sleeper, который не требует
— перехвата

1
Согласен. Если вы хотите объявить время сна константой, которую вы можете изменить позже, скажем, с 1 минуты до 10 секунд, одно решение - это public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);. Это позволяет, Thread.sleep()но сохраняет преимущество удобочитаемости TimeUnit.
— Ole VV

8

Они одинаковые. Я предпочитаю последний , потому что это более описательный характер и позволяет выбрать единицу времени (см TimeUnit): DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS.


5
аргумент: я предпочитаю первый - я хочу, чтобы нить спала, а не SECONDSor MILLISECONDS[:-)
— user85421 06

3
@CarlosHeuberger: ну, вы можете прочитать это как сон для xSECONDS , но, конечно же, это дело вкуса. С другой стороны, отмечают , что sleep()это staticметод по Thread- так можно было бы утверждать , что это не ясно , какой поток предполагают спать (что делает Thread myThread = ...; myThread.sleep()средний?)
— Томаш Nurkiewicz

6
@CarlosHeuberger Было бы гораздо лучше уметь писатьThread.sleep(3, TimeUnit.SECONDS)
— assylias 06

Обновлено, чтобы устранить любую путаницу в отношении эквивалентности из-за выбранных единиц
— Рэйчел

@assylias Я согласен, но, к сожалению, я не могу это изменить [: - |
— user85421 06
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.