Frage

Ist System.currentTimeMillis () das beste Maß für Pünktlichkeit in Java? Gibt es Gotcha Jahre, als dies mit der Zeit zu vergleichen, bevor Aktion auf die Zeit genommen wird, nachdem die Aktion ausgeführt wird? Gibt es eine bessere Alternative?

War es hilfreich?

Lösung

Ich hoffe nicht - es ist, was ich benutze, wenn ich a href nicht "verwenden <= http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html# (Nanotime)“rel = "noreferrer"> nanoTime() .

Andere Tipps

neben System.nanoTime(), JMX ist wahrscheinlich die beste realisierbare Option:

java.lang.management.ManagementFactory.getThreadMXBean()

Sie können aktuelle Thread CPU-Zeit abfragen (gemessen in Nanosekunden, aber nicht mit Nanosekunden Präzision, wie für System.nanoTime ())

Sie können verwenden Stoppuhr von Google Guava die Zeit super-leicht macht, zu messen.

Wenn Sie monotone Zeitmessungen benötigen, ist System.nanoTime eine bessere Wahl. System.currentTimeMillis unterliegt UTC Timing Variationen - Schaltsekunden, NTP-Updates und Jitter sowie Anwender den Systemtakt einstellen *. Dies kann einige spektakuläre Ausfälle in bestimmten Arten von Timing-Anwendungen verursachen. System.nanoTime soll alles immun sein.

Die Probleme mit System.nanoTime umfassen periodischen numerischen Überlauf und langfristige Zeit Ungenauigkeit, besser zu machen System.currentTimeMillis für längere Zeiträume (vorausgesetzt, dass die Benutzer der Systemuhr in Ruhe lassen). Beachten Sie, dass die Sommerzeit und Zeitzonenänderungen sollten nicht System.currentTimeMillis beeinflussen.

* Windows- "Sync mit Internet-Zeit" macht schrittweise Änderungen. Dies kann sehr störend sein, auf eine ordnungsgemäße NTP-Client-Implementierung gegenüber, dass „verjagt“, den Server durch die Client-Zeitbasis zur Frequenzanpassung.

Vor Java 1.5 gibt es nur System.currentTimeMillis. Jedoch ist die Granularität des Wertes hängt von dem zugrunde liegenden Betriebssystem und kann groß sein. Unter Windows XP ich am Ende manchmal mit Lücken von 20 ms auf. Ich habe gehört, Linux ist viel besser mit Lücken im Bereich von 1-2ms.

Mit Java 1.5 können Sie auch System.nanoTime verwenden. Ich hatte nie Probleme mit diesem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top