おそらく保証できない ユーザーが通話間のシステム時間を変更する可能性があるという事実に基づいて、増加する可能性があります。
それに加えて、すべき エポックからのミリ秒を表すため、増加し続けます。通常の「ウォール タイム」であれば、うるう日や夏時間の切り替えによる時間の変更について心配する必要があります。
いいえ、以前のすべての呼び出しが常に>=であるとは限りません。
-
同じスレッドから立て続けに数回呼び出すと、毎回増加するとは限りません (これが>=の =の部分であることはわかっていますが、その動作はしばしば人々を驚かせます)。
-
複数のスレッドから立て続けに数回呼び出すと、さまざまな処理が行われる可能性があります。実装とランダムな可能性に応じて、スレッド間で時間がわずかに戻る可能性があります。
-
最も深刻なことに、ユーザー (まれ) または NTP 同期 (潜在的に一般的) がシステムクロックを調整すると、値が大幅に時間を遡る可能性があります。
短い答えはノー、System.currentTimeMillis()
です。 ではない 単調。これはシステム時間に基づいているため、(NTP などによる) クロック調整の場合、いずれかの方向 (順方向または逆方向) に変動する可能性があります。
System.nanoTime()
基盤となるプラットフォームが CLOCK_MONOTONIC
をサポートしている場合に限り、単調です。 -- Java バグ レポート 6458294 のコメントを参照して、これが正しい/正しくないいくつかの状況に関する適切な記事を参照してください。
(そして、追加の逸話として、私は個人的に (数回) System.currentTimeMillis()
スレッド全体で、クロック調整がない場合に「逆方向」に実行します。つまり、あるスレッドでのそのメソッドへの呼び出しは、別のスレッドでの呼び出しよりも低い値を返しました。 ')
単調なソースが必要な場合は、System.nanoTime()
単調性をサポートするプラットフォーム上での使用が最良の選択肢です。