Faire un chronomètre en Java
-
Chronomètre en Java utilisant
System.nanoTime()
- Chronomètre en Java avec Apache Commons Lang
-
Chronomètre en Java en utilisant
Instant
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
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