2010-04-22 13 views
7

Voglio contare il tempo trascorso tra due eventi in nanosecondi. Per farlo, posso usare System.nanoTime() come indicato here. Il problema è che i due eventi stanno accadendo in diversi thread.System.nanoTime() è coerente tra i thread?


Dal nanoTime() non restituisce un timestamp assoluto ma invece può essere utilizzato solo per calcolare il tempo differenze, mi piacerebbe sapere se i valori che ricevo sui due fili diversi sono coerenti con la fisica tempo trascorso tra i due eventi.

+0

È possibile utilizzare nanoTime() per calcolare la differenza da un orario noto. Questo può consentire di ottenere un orologio abbastanza preciso. Non consiglierei di usarlo per tempi inferiori a un microsecondo. –

risposta

8

È supposed to be, ma a causa di kernel buggy o hardware, the answer can be no, almeno in alcuni ambienti.

+1

Inoltre, una volta ho avuto problemi quando l'impostazione di '-XX: AggressiveOpts' su Sun JVM ha portato a valori non affidabili per System.nanoTime(). –

+0

Non ho esperienza in materia, ma collegherò [questa risposta altamente pubblicizzata] (http://stackoverflow.com/a/4588605/1031507) che suggerisce che questo post del blog collegato non è corretto. –

+0

@PaulWhalen ti piace la mia risposta modificata meglio? –