1.Thread.sleep()
Sie können Pausen in die Ausführung eines Java-Programms einfügen. Dies ist normalerweise nicht erforderlich, da Benutzer möchten, dass ihre Programme so schnell wie möglich ausgeführt werden. Nicht viele Leute wären glücklich, wenn Sie Ihren Code absichtlich verlangsamen würden.
Aber als Programmierer kann es unzählige Situationen geben, in denen eine Pause in Ihrem Code nützlich sein kann. Angenommen, Sie schreiben ein Spiel und möchten, dass es alle zwei Sekunden oder mehrmals pro Sekunde etwas tut.
Grundsätzlich sind Pausen nützlich. Sehen wir uns also an, wie Sie Ihrem Code eine Pause hinzufügen. Eigentlich ist es ganz einfach:
Thread.sleep(duration);
Wo duration
ist die Länge der Pause in Millisekunden ( 1/1000
einer Sekunde).
Diese Anweisung hält Ihr Programm für duration
Millisekunden an. Beispiele:
|
Pausiert das Programm für 2 Sekunden. |
|
Pausiert das Programm für eine halbe Sekunde. |
|
Pausiert das Programm für 1 Stunde. |
Hier erfahren Sie, wie es in der Praxis eingesetzt werden kann. Nehmen wir an, wir schreiben ein Programm, das ein Raumschiff startet. So könnte der Code aussehen:
|
Jede Sekunde zeigt das Programm eine Zahl an: 10 , dann 9 , dann 8 usw. Wenn der Zählerstand erreicht ist 0 , zeigt das Programm „ Let's go! “ an. |
2. Eine Pause richtig berechnen
Die Länge der Pause lässt sich leicht berechnen. Wenn das Programm einmal pro Sekunde etwas tun soll, beträgt die Pause 1000 ms. Wenn 2 Mal pro Sekunde, dann 500 ms lang pausieren (1000/2).
Wenn Sie 15 Mal pro Sekunde etwas tun müssen, pausieren Sie 66 ms (1000/15). Es scheint alles ziemlich einfach zu sein:
The duration of one iteration of the loop = 1000 / number of times per second
Aber hier gibt es eine sehr wichtige Nuance. Obwohl viele Anweisungen sehr schnell ausgeführt werden, erfolgen sie nicht sofort.
Schau dir das an. Nehmen wir an, Sie haben eine Aktion, deren Ausführung 100 ms dauert. Sie möchten diese Aktion fünfmal pro Sekunde ausführen. Wie lange sollte man pausieren? Auf keinen Fall 200 ms.
Damit die Aktion 5 Mal pro Sekunde ausgeführt wird, benötigen wir eine Zeit, die zum Ausführen der Aktion erforderlich ist, plus die Pausendauer, die 200 ms beträgt. Wenn wir das machen, läuft es genau 5 Mal pro Sekunde. In unserem Fall benötigt die Aktion 100 ms, das heißt, es bleiben noch 100 ms für die Pause übrig.
pause duration = duration of one iteration of the loop - time required to execute the action
Spieleentwickler sind sich der Tatsache bewusst, dass die Zeit, die zum Ausführen einer Aktion benötigt wird, viel höher als Null ist. Und das gilt auch für die Leute, die Spiele spielen.
Wenn ein Spiel mit 20 FPS läuft, bedeutet das, dass es in einer Sekunde nur 20 Bilder auf den Bildschirm zeichnen kann. 1000/20
ergibt 50 ms. Dies ist die Zeit, die zum Zeichnen eines Rahmens während des Spiels benötigt wird.
3. Nanosekunden
Computer sind heute viel schneller als zu der Zeit, als Java erfunden wurde. Das bedeutet, dass eine Pause von 1 Millisekunde möglicherweise nicht ausreichend detailliert ist.
Angenommen, wir haben eine superkurze Aktion, die wir 2000 Mal pro Sekunde ausführen möchten. Wie halten wir eine halbe Millisekunde inne?
Hierzu gibt es noch eine weitere Variante der Thread.sleep()
Methode:
Thread.sleep(milliseconds, nanoseconds);
Diese Methode versetzt das Programm für die angegebene Zeit in Millisekunden und Nanosekunden in den Ruhezustand.
Nanosekunden sind 1 Millionstel Millisekunde. Das heißt, eine Pause von eineinhalb Millisekunden würde so aussehen:
Thread.sleep(1, 500_000);
Und wenn Sie eine Pause von 1/10
einer Millisekunde wünschen, müssen Sie Folgendes schreiben:
Thread.sleep(0, 100_000);
Möglicherweise verwenden Sie diese Methode derzeit nicht in Ihren Programmen. Aber es ist besser, davon zu wissen und es nicht zu nutzen, als es zu brauchen und nichts davon zu wissen.
4. TimeUnit
Klasse
Übrigens gibt es in Java noch eine weitere Klasse, die Ihnen das Leben erleichtert, wenn Sie Ihre Anwendung verlangsamen möchten. Wir sprechen über die TimeUnit
Klasse im java.util.concurrent
Paket.
Denken Sie daran, dass Sie, da die Klasse nicht im java.lang
Paket enthalten ist, entweder die Zeile hinzufügen import java.util.concurrent.TimeUnit;
oder java.util.concurrent.TimeUnit
jedes Mal in Ihren Code schreiben müssen.
Diese Klasse macht dasselbe wie Thread.sleep()
, ist aber praktischer:
TimeUnit.HOURS.sleep(15)
Dieser Code versetzt Ihr Programm für 15 Stunden in den Ruhezustand. Minuten, Sekunden, Tage sind ebenfalls verfügbar. Sowie Mikrosekunden (1/1000.000) und Nanosekunden (1/1000.000.000).
Die TimeUnit
Klasse hat die folgenden Eigenschaften:
- Nanosekunden:
NANOSECONDS
- Mikrosekunden:
MICROSECONDS
- Millisekunden:
MILLISECONDS
- Sekunden
SECONDS
- Protokoll:
MINUTES
- Std:
HOURS
- Tage:
DAYS
Die Arbeit mit diesen Eigenschaften ist äußerst praktisch, da man sich keine Gedanken über die Umrechnung beispielsweise von Stunden in Millisekunden machen muss. Solcher Code ist viel angenehmer zu schreiben und zu lesen.
GO TO FULL VERSION