milliseconde synchronisation en java


Je chronomètre diverses transactions dans mon application Java. Au début de la transaction, j'obtiens une heure de début en instanciant un calendrier, puis en obtenant l'heure, la minute, la seconde et la milliseconde. Je termine la transaction, instancie un nouveau calendrier et obtiens une nouvelle heure, minute, seconde et milliseconde. Mon raisonnement est que la différence entre l'heure de début et l'heure de fin est la date de la transaction. Cela semble fonctionner, la plupart du temps, mais un petit fraction du temps, de l'heure de fin est antérieure à l'heure de début. Pourquoi et comment puis-je l'empêcher?

Author: Elliott, 2010-07-27

1 answers

Eh Bien, pour une chose d'une façon plus simple de calculer la différence serait d'utiliser quelque chose comme System.currentTimeMillis() ou System.nanoTime() - de cette façon, vous n'avez pas besoin de faire autre chose que d'une simple soustraction pour obtenir le nombre de millisecondes ou le nombre de nanosecondes entre le début et la fin.

Cependant, si votre horloge système est mise à jour par NTP ou quelque chose de similaire, le temps peut effectivement revenir en arrière de temps en temps - en fonction de la façon dont l'inclinaison de l'horloge est gérée. (Certains systèmes ralentissent simplement l'horloge système pendant un certain temps pour l'incliner vers la réalité; d'autres peuvent avoir des discontinuités.)

Je ne suis pas sûr de la meilleure façon d'éviter cela - je ne crois pas le JRE a actuellement quelque chose d'équivalent à Stopwatch dans.NET, qui est purement pour mesurer les intervalles et ne (je crois) pas être foiré par le changement d'horloge système.

(Je suis d'accord avec la recommandation d'Erick de Joda Time, btw - bien que je ne pense pas que vous en ayez besoin pour ce problème particulier.)

 8
Author: Jon Skeet, 2010-07-27 13:01:04