記事のディレクトリ
1 System.nanoTimeの()が定義されています
System.nanoTime()
戻り値のみと进程已运行的时间有关
、不受调系统时间影响
。
コメントはナノ秒の方法によれば:
ナノ秒単位で返します実行しているJava仮想マシンの高分解能タイムソースの現在の値を、。
この方法は、経過時間を測定するために使用することができ、システム又は壁時計時間の任意の他の概念に関連していません。(値は負であってもよいので、おそらく将来的に)戻り値は、いくつかの固定されたが、任意の起源の時間のでナノ秒を表します。同じ起源は、Java仮想マシンのインスタンスでは、この方法のすべての呼び出しで使用されます。他の仮想マシンインスタンスは、異なる起源を使用する可能性があります。
翻訳:電流を返しますJVM的高精度时间
。この方法にのみ使用することができます测量时段
し、と系统时间无关
。これは、特定の戻り値である固定但随意
時点で(将来的にはおそらくいくつかの時間)を開始します。異なるJVM
用途の出発点が異なっていてもよいです。
これは少し怖いが、結果が異なる可能性があり、我々は異なるマシン上で実行する同じコードです。したがって、それはほとんど、計算するために使用されていない通常測定先后顺序
と时间段
、テスト前netty
(時間ラウンドツールクラスHasedTimeWheel
)がサポートされていないことを見出し调系统时间
、このようなタスクは6:00行われ、ホイール時に提出した後、時間がシステムを7に調整しました。ポイントタスクはすぐに実行されていませんが、見てHasedTimeWheel
、このような見つけるために、試験食の後、サポート転送時間に設計された感じというコードは(すなわち、タスクが午前7時直後に実行されなければならない転送)System.nanoTime()
として当前时间
転送時間をサポートするために、 、ちょうどする必要がありますSystem.nanoTime()
置き換えるSystem.currentTimeMillis()
(関連する時間単位を変更しなければならない)。
System.currentTimeMillis()
から戻り1970
、今まで数ミリ秒
2つの比較期間
System.nanoTime()
戻り値は、呼び出しを決定するために0を使用する減算オーダーよりも大きいが、使用することができないかどう>
か、<
判断する。
System.nanoTime()
実際の値は、64ビット符号なし数である返し随着进程运行时间增长, 溢出后再从0开始
相補ように対応するロングコードのタイプに割り当てられ、(符号付き数)使用した値の周期的な性質を次のように:
最小负数 -> 0 -> 最大正数 -> 最小负数 -> ...
仮定が2つの未知の呼び出しシーケンスであり、時間間隔は、以下の二つの呼び出しである2^63ns
(+約200年)
long t1 = System.nanoTime();
long t2 = System.nanoTime();
場合t1
及びt2
正またはでありt1
且つt2
負であり、t1
そしてt2
差を超えない2^63
、それらはないオーバーフローし減算、t1>t2 <=> t1-t2>0
および多数減算比較することによって、最初の呼び出しの後に戻り、そうしなければならない><
比較演算子を;ができ
t1とt2、正と負、t2が設け正数である場合に比較値が符号なしの数であるように、呼が返された後に、T1がT2> T1とT2が最初後導出されるように、負知ることができるされていますコールがエラーである。加えて、我々は、2つのコールを想定すると、2未満のスペーサーである63は、t2-t1
一定の値が2よりも大きい63である(にlong
負である)、それはt2-t1<0
この時点ではまだ正しい減算することによって決定されます。
综上所述,System.nanoTime()是不适合作为数据库主键