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:
publicvoidsleep(long timeout)throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
Thread.sleep(ms, ns);
}
}
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.
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ć [: - |
Thread.sleep(Duration.ofSeconds(s).toMillis())
Odpowiedzi:
TimeUnit.SECONDS.sleep(x)
zadzwoniThread.sleep
. Jedyną różnicą jest czytelność, a użycieTimeUnit
jest 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()
wTimeUnit
:public void sleep(long timeout) throws InterruptedException { if (timeout > 0) { long ms = toMillis(timeout); int ns = excessNanos(timeout, ms); Thread.sleep(ms, ns); } }
źródło
public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);
. Umożliwia to,Thread.sleep()
ale zachowuje przewagę czytelnościTimeUnit
.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
.źródło
SECONDS
lubMILLISECONDS
[:-)SECONDS
, ale na pewno jest to kwestia gustu. Z drugiej strony uwaga, żesleep()
jeststatic
metoda włączonaThread
- można więc argumentować, że nie jest jasne, który wątek ma spać (co toThread myThread = ...; myThread.sleep()
znaczy?)Thread.sleep(3, TimeUnit.SECONDS)