1.Thread.sleep()

Vous pouvez insérer des pauses dans l'exécution d'un programme Java. Ce n'est généralement pas nécessaire, car les utilisateurs souhaitent que leurs programmes s'exécutent le plus rapidement possible. Peu de gens seraient heureux si vous ralentissiez délibérément votre code.

Mais en tant que programmeur, il peut y avoir des tonnes de situations où une pause dans votre code sera utile. Par exemple, supposons que vous écriviez un jeu et que vous vouliez qu'il fasse quelque chose une fois toutes les deux secondes ou plusieurs fois par seconde.

Fondamentalement, les pauses sont utiles, alors voyons comment ajouter une pause à votre code. C'est en fait très simple :

Thread.sleep(duration);

duration est la durée de la pause en millisecondes ( 1/1000d'une seconde).

Cette instruction mettra votre programme en pause pendant duration quelques millisecondes. Exemples:

Thread.sleep(2000);
Met le programme en pause pendant 2 secondes.
Thread.sleep(500);
Met le programme en pause pendant une demi-seconde.
Thread.sleep(60 * 60 * 1000);
Met le programme en pause pendant 1 heure.

Voici comment il peut être utilisé dans la pratique. Disons que nous écrivons un programme qui lancera un vaisseau spatial. Voici à quoi pourrait ressembler le code :

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

System.out.println("Let's go!");
Chaque seconde, le programme affichera un nombre : 10, puis 9, puis 8, etc.




Lorsque le décompte atteint 0, le programme affichera " Let's go!"

2. Calculer correctement une pause

La durée de la pause est facile à calculer. Si vous avez besoin que le programme fasse quelque chose une fois par seconde, la pause est de 1000 ms. Si 2 fois par seconde, faites une pause de 500 ms (1000/2).

Si vous devez faire quelque chose 15 fois par seconde, faites une pause de 66 ms (1000/15). Tout semble assez simple :

The duration of one iteration of the loop = 1000 / number of times per second

Mais il y a une nuance très importante ici. Bien que de nombreuses instructions s'exécutent très rapidement, elles ne sont pas instantanées.

Regarde ça. Disons que vous avez une action qui prend 100 ms pour se terminer. Vous voulez effectuer cette action 5 fois par seconde. Combien de temps faut-il faire une pause ? Certainement pas 200 ms.

Pour que l'action soit exécutée 5 fois par seconde, il faut que le temps nécessaire à l'exécution de l'action plus la durée de la pause soit égal à 200 ms. Si nous faisons cela, il fonctionnera précisément 5 fois par seconde. Dans notre cas, l'action nécessite 100 ms, ce qui signifie qu'il reste encore 100 ms pour la pause.

pause duration = duration of one iteration of the loop - time required to execute the action

Les développeurs de jeux sont bien conscients du fait que le temps nécessaire pour exécuter une action est bien supérieur à zéro. Et sont donc les gens qui jouent à des jeux.

Si un jeu tourne à 20 FPS, cela signifie qu'il ne peut dessiner que 20 images à l'écran en une seconde. 1000/20donne 50 ms. C'est le temps nécessaire pour dessiner un cadre tout en jouant au jeu.



3. Nanosecondes

Les ordinateurs d'aujourd'hui sont beaucoup plus rapides que lorsque Java a été créé. Cela signifie qu'une pause de 1 milliseconde peut ne pas être suffisamment granulaire.

Supposons que nous ayons une action super brève que nous voulons effectuer 2000 fois par seconde. Comment faire une pause d'une demi-milliseconde ?

Pour cela, il existe une autre variante de la Thread.sleep()méthode :

Thread.sleep(milliseconds, nanoseconds);

Cette méthode met le programme en veille pendant le nombre spécifié de millisecondes et de nanosecondes.

Les nanosecondes sont 1 millionième de milliseconde. Cela signifie qu'une pause d'une milliseconde et demie ressemblerait à ceci :

Thread.sleep(1, 500_000);

Et si vous voulez une pause d' 1/10une milliseconde, vous devez écrire ceci :

Thread.sleep(0, 100_000);

Vous n'utilisez peut-être pas cette méthode dans vos programmes pour le moment. Mais il vaut mieux le savoir et ne pas l'utiliser que d'en avoir besoin et ne pas le savoir.



4. TimeUnitclasse

Soit dit en passant, Java a une autre classe qui vous facilitera la vie si vous décidez de ralentir votre application. Nous parlons de la TimeUnitclasse dans le java.util.concurrentpackage.

N'oubliez pas que puisque la classe n'est pas dans le java.langpackage, vous devez soit ajouter la ligne import java.util.concurrent.TimeUnit;, soit écrire java.util.concurrent.TimeUnità chaque fois dans votre code.

Cette classe fait la même chose que Thread.sleep(), mais c'est plus pratique :

TimeUnit.HOURS.sleep(15)

Ce code mettra votre programme en veille pendant 15 heures. Minutes, secondes, jours sont également disponibles. Ainsi que les microsecondes (1/1000 000) et les nanosecondes (1/1000 000 000).

La TimeUnit classe a les propriétés suivantes :

  • nanosecondes :NANOSECONDS
  • microsecondes :MICROSECONDS
  • millisecondes :MILLISECONDS
  • secondesSECONDS
  • minutes:MINUTES
  • heures:HOURS
  • jours:DAYS

Travailler avec ces propriétés est super pratique, car il n'est pas nécessaire de penser à convertir, par exemple, des heures en millisecondes. Un tel code est beaucoup plus agréable à écrire et à lire.

Plus de détails peuvent être lus ici .