Cela ne pouvait pas être garanti être en augmentation, sur la base du fait que l'utilisateur pourrait potentiellement modifier l'heure du système entre les appels.
En plus de cela, il devrait continue d'augmenter car il représente des millisecondes depuis l'époque. S'il s'agissait d'une "heure normale", vous auriez à vous soucier des changements d'heure les jours bissextiles ou du passage à l'heure d'été.
Non, ce ne sera pas toujours>=tous les appels précédents.
-
Il se peut qu'il n'augmente pas à chaque fois si vous l'appelez plusieurs fois de suite à partir du même fil (je sais que c'est la partie =de>=, mais le comportement surprend souvent les gens).
-
Si vous l'appelez plusieurs fois en succession rapide à partir de plusieurs threads, il peut faire un certain nombre de choses :il peut remonter légèrement dans le temps d'un thread à l'autre d'une très petite quantité, en fonction de l'implémentation et du hasard.
-
Plus sérieusement, la valeur peut remonter considérablement dans le temps si l'utilisateur (rare) ou une synchronisation NTP (potentiellement courante) ajuste l'horloge système.
La réponse courte est non, System.currentTimeMillis()
n'est pas monotone. Il est basé sur l'heure du système et peut donc être sujet à des variations dans les deux sens (vers l'avant ou vers l'arrière) dans le cas d'ajustements d'horloge (par exemple via NTP).
System.nanoTime()
est monotone, si et seulement si la plateforme sous-jacente supporte CLOCK_MONOTONIC
-- voir les commentaires sur le rapport de bogue Java 6458294 pour une bonne description de certaines circonstances où cela est/n'est pas vrai.
(Et, en guise d'anecdote supplémentaire, j'ai personnellement observé (plusieurs fois) System.currentTimeMillis()
exécuter 'en arrière', en l'absence d'ajustements d'horloge, à travers les threads - c'est-à-dire qu'un appel à cette méthode dans un thread a renvoyé une valeur inférieure à un appel dans un autre thread, même s'il s'est produit chronologiquement après en 'temps réel ')
Si vous avez besoin d'une source monotone, System.nanoTime()
sur une plate-forme prenant en charge la monotonie est votre meilleure option.