2010-04-22 10 views
7

Ich möchte die Zeit zwischen zwei Ereignissen in Nanosekunden zählen. Um das zu tun, kann ich System.nanoTime() wie erwähnt here verwenden. Das Problem ist, dass die zwei Ereignisse in verschiedenen Threads stattfinden.Ist System.nanoTime() konsistent über Threads?


Da nanoTime() keine absoluten Zeitstempel zurückgeben, sondern kann nur dann verwendet werden, um Zeit zu berechnen Unterschiede, würde ich gerne wissen, ob die Werte, die ich an den beiden unterschiedlichen Themen erhalten sind konsistent mit dem physikalischen verstrichene Zeit zwischen den beiden Ereignissen.

+0

Sie können nanoTime() verwenden, um die Abweichung von einer bekannten Zeit zu berechnen. Dadurch können Sie eine ziemlich genaue Uhr erhalten. Ich würde nicht vorschlagen, es für Zeiten zu verwenden, die kleiner als eine Mikrosekunde sind. –

Antwort

8

Es ist supposed to be, aber wegen der fehlerhaften Kernel oder Hardware, the answer can be no, zumindest in einigen Umgebungen.

+1

Auch habe ich einmal in Schwierigkeiten geraten, wenn die Einstellung "-XX: AggressiveOpts" auf Sun JVM zu unzuverlässigen Werten für System.nanoTime() führte. –

+0

Ich habe keine Expertise in der Sache, aber ich werde [diese stark upvoted Antwort] verlinken (http://Stackoverflow.com/a/4588605/1031507), die darauf hindeutet, dass dieser verlinkte Blogpost falsch ist. –

+0

@PaulWhalen magst du meine bearbeitete Antwort besser? –

Verwandte Themen