Gibt es einen Grund, eine dieser Formen der anderen vorzuziehen, wenn ich einen Anruf erhalten soll, damit ein Java-Thread in den Ruhezustand wechselt?
Eine andere Option istThread.sleep(Duration.ofSeconds(s).toMillis())
Cambunctious
Antworten:
121
TimeUnit.SECONDS.sleep(x)wird anrufen Thread.sleep. Der einzige Unterschied ist die Lesbarkeit und die Verwendung TimeUnitist wahrscheinlich für nicht offensichtliche Zeiträume leichter zu verstehen (zum Beispiel: Thread.sleep(180000)vs. TimeUnit.MINUTES.sleep(3)).
Als Referenz siehe unten den Code von sleep()in TimeUnit:
Genau. Wenn Sie Ihre Schlafzeit als Konstante deklarieren möchten, die Sie später ändern können, z. B. von 1 Minute auf 10 Sekunden, ist eine Lösung public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);. Dies ermöglicht Thread.sleep(), behält aber den Lesbarkeitsvorteil von bei TimeUnit.
Ole VV
8
Sie sind gleich. Ich ziehe das letztere , weil es mehr beschreibend und ermöglicht Zeiteinheit (siehe wählen TimeUnit): DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS.
argumentativ: Ich bevorzuge die erste - ich möchte, dass der Thread schläft, nicht die SECONDSoder MILLISECONDS[:-)
user85421
3
@CarlosHeuberger: Nun, Sie können es als Schlaf für xSECONDS lesen , aber es ist sicherlich Geschmackssache. Beachten Sie andererseits, dass dies sleep()eine staticMethode ist Thread- man könnte also argumentieren, dass nicht klar ist, welcher Thread schlafen soll (was bedeutet Thread myThread = ...; myThread.sleep()das?)
Tomasz Nurkiewicz
6
@ CarlosHeuberger Wäre viel besser schreiben zu könnenThread.sleep(3, TimeUnit.SECONDS)
Assylias
Aktualisiert, um Verwirrung über die Äquivalenz aufgrund ausgewählter Einheiten zu beseitigen
Rachel
@assylias Ich stimme zu, aber leider kann ich es nicht ändern [: - |
Thread.sleep(Duration.ofSeconds(s).toMillis())
Antworten:
TimeUnit.SECONDS.sleep(x)
wird anrufenThread.sleep
. Der einzige Unterschied ist die Lesbarkeit und die VerwendungTimeUnit
ist wahrscheinlich für nicht offensichtliche Zeiträume leichter zu verstehen (zum Beispiel:Thread.sleep(180000)
vs.TimeUnit.MINUTES.sleep(3)
).Als Referenz siehe unten den Code von
sleep()
inTimeUnit
:quelle
public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);
. Dies ermöglichtThread.sleep()
, behält aber den Lesbarkeitsvorteil von beiTimeUnit
.Sie sind gleich. Ich ziehe das letztere , weil es mehr beschreibend und ermöglicht Zeiteinheit (siehe wählen
TimeUnit
):DAYS
,HOURS
,MICROSECONDS
,MILLISECONDS
,MINUTES
,NANOSECONDS
,SECONDS
.quelle
SECONDS
oderMILLISECONDS
[:-)SECONDS
lesen , aber es ist sicherlich Geschmackssache. Beachten Sie andererseits, dass diessleep()
einestatic
Methode istThread
- man könnte also argumentieren, dass nicht klar ist, welcher Thread schlafen soll (was bedeutetThread myThread = ...; myThread.sleep()
das?)Thread.sleep(3, TimeUnit.SECONDS)