Thread.sleep a TimeUnit.SECONDS.sleep

91

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)
Rachel
źródło
1
Inną opcją jestThread.sleep(Duration.ofSeconds(s).toMillis())
kombunctious

Odpowiedzi:

126

TimeUnit.SECONDS.sleep(x)zadzwoni Thread.sleep. Jedyną różnicą jest czytelność, a użycie TimeUnitjest 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);
    }
}
asylias
źródło
FYI: projekt Selenium ma metodę Sleeper, która nie wymaga wychwytywania wyjątku podczas jego używania: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/…
djangofan
1
Zgadzam się. Jeśli chcesz zadeklarować swój czas snu jako stałą, którą możesz później zmienić, powiedzmy, od 1 minuty do 10 sekund, jednym rozwiązaniem jest public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);. Umożliwia to, Thread.sleep()ale zachowuje przewagę czytelności TimeUnit.
Ole VV
8

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.

Tomasz Nurkiewicz
źródło
5
kłótliwy: wolę pierwszy - chcę, aby wątek spał, a nie SECONDSlub MILLISECONDS[:-)
user85421
3
@CarlosHeuberger: cóż, możesz to odczytać jako sen dla xSECONDS , ale na pewno jest to kwestia gustu. Z drugiej strony uwaga, że sleep()jest staticmetoda 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?)
Tomasz Nurkiewicz
6
@CarlosHeuberger Byłoby znacznie lepiej móc pisaćThread.sleep(3, TimeUnit.SECONDS)
assylias
Zaktualizowano, aby usunąć wszelkie nieporozumienia dotyczące równoważności z powodu wybranych jednostek
Rachel
@assylias Zgadzam się, ale niestety nie mogę tego zmienić [: - |
user85421