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/1000einer Sekunde).

Diese Anweisung hält Ihr Programm für duration Millisekunden an. Beispiele:

Thread.sleep(2000);
Pausiert das Programm für 2 Sekunden.
Thread.sleep(500);
Pausiert das Programm für eine halbe Sekunde.
Thread.sleep(60 * 60 * 1000);
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:

for (int i = 10; i > 0; i--)
{
   System.out.println(i);
   Thread.sleep(1000);
}

System.out.println("Let's go!");
Jede Sekunde zeigt das Programm eine Zahl an: 10, dann 9, dann 8usw.




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/20ergibt 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/10einer 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. TimeUnitKlasse

Ü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 TimeUnitKlasse im java.util.concurrentPaket.

Denken Sie daran, dass Sie, da die Klasse nicht im java.langPaket enthalten ist, entweder die Zeile hinzufügen import java.util.concurrent.TimeUnit;oder java.util.concurrent.TimeUnitjedes 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
  • SekundenSECONDS
  • 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.

Weitere Einzelheiten können hier nachgelesen werden .