Es kann unmöglich garantiert werden zu erhöhen, basierend auf der Tatsache, dass der Benutzer möglicherweise die Systemzeit zwischen Anrufen ändern könnte.
Abgesehen davon sollte es Bleiben Sie steigend, da es Millisekunden seit der Epoche darstellt. Wenn es eine normale "Wandzeit" wäre, müssten Sie sich um Zeitumstellungen am Schalttag oder bei der Umstellung auf Sommerzeit kümmern.
Nein, es sind nicht immer>=alle vorherigen Aufrufe.
-
Es erhöht sich möglicherweise nicht jedes Mal, wenn Sie es mehrmals schnell hintereinander aus demselben Thread aufrufen (ich weiß, dass dies der =-Teil von>=ist, aber das Verhalten überrascht die Leute oft).
-
Wenn Sie es mehrmals schnell hintereinander von mehreren Threads aus aufrufen, kann es eine beliebige Anzahl von Dingen tun - es könnte über Threads hinweg um einen sehr kleinen Betrag in der Zeit etwas zurückgehen, abhängig von der Implementierung und dem zufälligen Zufall.
-
Am schwerwiegendsten ist, dass der Wert möglicherweise um einen großen Betrag zurückgeht, wenn der Benutzer (selten) oder eine NTP-Synchronisierung (möglicherweise häufig) die Systemuhr anpasst.
Die kurze Antwort ist nein, System.currentTimeMillis()
ist nicht monoton. Sie basiert auf der Systemzeit und kann daher bei Uhrzeitanpassungen (z. B. über NTP) in beide Richtungen (vorwärts oder rückwärts) variieren.
System.nanoTime()
ist monoton, wenn und nur wenn die zugrunde liegende Plattform CLOCK_MONOTONIC
unterstützt -- siehe die Kommentare zum Java-Fehlerbericht 6458294 für eine gute Beschreibung einiger Umstände, in denen dies zutrifft/nicht zutrifft.
(Und als zusätzliche Anekdote habe ich persönlich (mehrmals) System.currentTimeMillis()
beobachtet läuft 'rückwärts', ohne Zeitanpassungen, über Threads hinweg - das heißt, ein Aufruf dieser Methode in einem Thread hat einen niedrigeren Wert zurückgegeben als ein Aufruf in einem anderen Thread, obwohl er chronologisch danach in 'Echtzeit' erfolgte ')
Wenn Sie eine monotone Quelle benötigen, System.nanoTime()
auf einer Plattform, die Monotonie unterstützt, ist die beste Option.