2010-04-22 21 views
7

Je veux compter le temps écoulé entre deux événements en nanosecondes. Pour ce faire, je peux utiliser System.nanoTime() comme mentionné here. Le problème est que les deux événements se produisent dans différents threads.System.nanoTime() est-il cohérent entre les threads?


Depuis nanoTime() ne retourne pas un horodatage absolu mais ne peut être utilisé pour calculer le temps différences, je voudrais savoir si les valeurs que je reçois sur les deux threads différents sont compatibles avec le physique le temps écoulé entre les deux événements.

+0

Vous pouvez utiliser nanoTime() pour calculer la différence à partir d'une heure connue. Cela peut vous permettre d'obtenir une horloge assez précise. Je ne suggérerais pas de l'utiliser pour des temps plus petits qu'une micro-seconde. –

Répondre

8

C'est supposed to be, mais en raison de noyaux bogués ou de matériel, the answer can be no, au moins dans certains environnements.

+1

En outre, j'ai eu des problèmes lors de la définition de '-XX: AggressiveOpts' sur Sun JVM pour des valeurs non fiables pour System.nanoTime(). –

+0

Je n'ai aucune expertise en la matière, mais je vais lier [cette réponse fortement mise à jour] (http://stackoverflow.com/a/4588605/1031507) qui suggère que cet article de blog lié est incorrect. –

+0

@PaulWhalen Aimez-vous mieux ma réponse éditée? –