Faire un chronomètre en Java

Rupam Yadav 12 octobre 2023
  1. Chronomètre en Java utilisant System.nanoTime()
  2. Chronomètre en Java avec Apache Commons Lang
  3. Chronomètre en Java en utilisant Instant
Faire un chronomètre en Java

Nous pouvons obtenir le temps écoulé d’une tâche spécifique en Java en utilisant plusieurs méthodes que nous allons voir ci-dessous. Un chronomètre Java est nécessaire lorsque la tâche est cruciale dans le temps, et nous voulons connaître le temps pris par une tâche de longue durée comme le calcul d’une série de Fibonacci.

Chronomètre en Java utilisant System.nanoTime()

Nous voulons garder l’heure du chronomètre aussi précise que possible, et donc pour ce faire, nous utilisons la classe System.nanotTime() qui renvoie la valeur en nanosecondes qui est la valeur la plus précise de la minuterie système.

Dans le programme, nous créons deux classes, Stopwatch1 et Stopwatch. Dans les deux méthodes Stopwatch1 pour démarrer et arrêter le chronomètre, start() initialise le stopWatchStartTime avec les nanosecondes actuelles en utilisant System.nanoTime() et définit la valeur de stopWatchRunning (vérifie si le chronomètre est en cours d’exécution) comme true.

stop() initialise le stopWatchStopTime et définit stopWatchRunning sur false. Ensuite, nous pouvons utiliser quatre fonctions pour calculer le temps total écoulé en millisecondes, secondes, minutes et heures. Chaque méthode a une variable locale appelée elapsedTime qui stocke la valeur qui est la valeur de System.nanoTime() soustraite par le stopWatchStartTime si le chronomètre fonctionne et il ne fonctionne pas, alors nous faisons stopWatchStopTime - stopWatchStartTime.

Maintenant, comme la valeur de elapsedTime dans chaque fonction est en nanosecondes, nous convertissons sa valeur en différentes unités de temps en divisant elapsedTime par les nanosecondes qu’elle contient.

Dans la classe Stopwatch, nous créons un objet de Stopwatch1 et appelons la méthode start(). Ensuite, nous appelons la méthode qui calcule la série de Fibonacci en utilisant la méthode de récursivité, et enfin, nous appelons la fonction stop(). Le temps entre les fonctions start() et stop() est le temps écoulé affiché dans la sortie.

import java.math.BigInteger;

class Stopwatch1 {
  private final long nanoSecondsPerMillisecond = 1000000;
  private final long nanoSecondsPerSecond = 1000000000;
  private final long nanoSecondsPerMinute = 60000000000L;
  private final long nanoSecondsPerHour = 3600000000000L;

  private long stopWatchStartTime = 0;
  private long stopWatchStopTime = 0;
  private boolean stopWatchRunning = false;

  public void start() {
    this.stopWatchStartTime = System.nanoTime();
    this.stopWatchRunning = true;
  }

  public void stop() {
    this.stopWatchStopTime = System.nanoTime();
    this.stopWatchRunning = false;
  }

  public long getElapsedMilliseconds() {
    long elapsedTime;

    if (stopWatchRunning)
      elapsedTime = (System.nanoTime() - stopWatchStartTime);
    else
      elapsedTime = (stopWatchStopTime - stopWatchStartTime);

    return elapsedTime / nanoSecondsPerMillisecond;
  }

  public long getElapsedSeconds() {
    long elapsedTime;

    if (stopWatchRunning)
      elapsedTime = (System.nanoTime() - stopWatchStartTime);
    else
      elapsedTime = (stopWatchStopTime - stopWatchStartTime);

    return elapsedTime / nanoSecondsPerSecond;
  }

  public long getElapsedMinutes() {
    long elapsedTime;
    if (stopWatchRunning)
      elapsedTime = (System.nanoTime() - stopWatchStartTime);
    else
      elapsedTime = (stopWatchStopTime - stopWatchStartTime);

    return elapsedTime / nanoSecondsPerMinute;
  }

  public long getElapsedHours() {
    long elapsedTime;
    if (stopWatchRunning)
      elapsedTime = (System.nanoTime() - stopWatchStartTime);
    else
      elapsedTime = (stopWatchStopTime - stopWatchStartTime);

    return elapsedTime / nanoSecondsPerHour;
  }
}

public class Stopwatch {
  public static void main(String[] args) {
    Stopwatch1 stopwatch1 = new Stopwatch1();
    stopwatch1.start();
    Fibonacci(45);
    stopwatch1.stop();

    System.out.println("Elapsed time in milliseconds: " + stopwatch1.getElapsedMilliseconds());

    System.out.println("Elapsed time in seconds: " + stopwatch1.getElapsedSeconds());

    System.out.println("Elapsed time in minutes: " + stopwatch1.getElapsedMinutes());

    System.out.println("Elapsed time in hours: " + stopwatch1.getElapsedHours());
  }

  private static BigInteger Fibonacci(int n) {
    if (n < 2)
      return BigInteger.ONE;
    else
      return Fibonacci(n - 1).add(Fibonacci(n - 2));
  }
}

Production:

Elapsed time in milliseconds: 31161
Elapsed time in seconds: 31
Elapsed time in minutes: 0
Elapsed time in hours: 0

Chronomètre en Java avec Apache Commons Lang

Pour cet exemple, nous utilisons la bibliothèque Apache Commons. Vous trouverez ci-dessous la dépendance pour l’inclure dans notre projet.

 <dependency>
     <groupId>org.apache.commons</groupId>
     <artifactId>commons-lang3</artifactId>
     <version>3.11</version>
 </dependency>

On crée un objet de la classe StopWatch qui vient avec la librairie puis on appelle la fonction start(). Après avoir démarré le chronomètre, nous appelons la fonction Fibonacci() puis arrêtons le chronomètre en utilisant stop(). Maintenant, pour obtenir le temps écoulé, nous appelons stopWatch.getTime() qui renvoie le temps écoulé et dans getTime() nous pouvons passer différentes unités de temps.

import java.math.BigInteger;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.time.StopWatch;

public class Stopwatch {
  public static void main(String[] args) {
    StopWatch stopWatch = new StopWatch();

    stopWatch.start();
    Fibonacci(40);
    stopWatch.stop();

    System.out.println(
        "Get elapsed time in milliseconds: " + stopWatch.getTime(TimeUnit.MILLISECONDS));
    System.out.println("Get elapsed time in seconds: " + stopWatch.getTime(TimeUnit.SECONDS));
    System.out.println("Get elapsed time in minutes: " + stopWatch.getTime(TimeUnit.MINUTES));
    System.out.println("Get elapsed time in hours: " + stopWatch.getTime(TimeUnit.HOURS));
  }

  private static BigInteger Fibonacci(int n) {
    if (n < 2)
      return BigInteger.ONE;
    else
      return Fibonacci(n - 1).add(Fibonacci(n - 2));
  }
}

Production:

Get elapsed time in milliseconds: 3483
Get elapsed time in seconds: 3
Get elapsed time in minutes: 0
Get elapsed time in hours: 0

Chronomètre en Java en utilisant Instant

Instant fait partie du package java.time. Il renvoie l’instant courant de l’horloge système. Nous avons deux valeurs instantanées utilisant Instant.now() d’abord avant l’exécution de Fibonacci() et une après l’exécution. Ensuite, nous calculons la différence entre les deux valeurs à l’aide de Duration.between() où nous passons les valeurs instatStarted et instantStopped qui renvoient une Duration que nous pouvons convertir en différentes unités de temps comme toMillis() pour millisecondes, toSeconds() pour les secondes et pour les minutes, nous utilisons toMinutes().

import java.math.BigInteger;
import java.time.Duration;
import java.time.Instant;

public class Stopwatch {
  public static void main(String[] args) {
    Instant instantStarted = Instant.now();
    Fibonacci(40);
    Instant instantStopped = Instant.now();

    Duration durationBetween = Duration.between(instantStarted, instantStopped);

    System.out.println("Get elapsed time in milliseconds: " + durationBetween.toMillis());
    System.out.println("Get elapsed time in seconds: " + durationBetween.toSeconds());
    System.out.println("Get elapsed time in minutes: " + durationBetween.toMinutes());
  }

  private static BigInteger Fibonacci(int n) {
    if (n < 2)
      return BigInteger.ONE;
    else
      return Fibonacci(n - 1).add(Fibonacci(n - 2));
  }
}

Production:

Get elapsed time in milliseconds: 3510
Get elapsed time in seconds: 3
Get elapsed time in minutes: 0
Auteur: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn