0

アプリでsystem.nanoTimeを使用しており、開始時刻を基準にして時間を計算しています。
私のアプリは、新しいコンピューターにコピーするまで非常にうまく動作し、その上でナノタイムを使用すると値が遅くなります。

念のため、簡単なアプリを作成しました。
ナノ時間はシステム時間と比較されます。
私の新しいコンピュータを除いて、他のコンピュータでも同じ値を示しています。助言がありますか?

これが私のコードです:最初に私は持っています

private long initNanoTime = System.nanoTime();
private long initTime = System.currentTimeMillis();

毎秒実行されるスレッドをループするよりも:

long timeUsingNanoTime = initTime + (System.nanoTime() - initNanoTime) / 1000000;
long timeUsingMilis = System.currentTimeMillis();
long nanotimeOffset = Math.abs(timeUsingNanoTime - timeUsingMilis);
if (nanotimeOffset < 100l) ? print("close") : print(far);

編集:私はnanoを使用しています。これは、nano時間で発生するtsも処理し、受信したnano時間をログに出力する必要があるためです。

4

1 に答える 1

6

これは、JavaAPIドキュメントが次のように述べているようなものですSystem.nanoTime()

この方法は経過時間を測定するためにのみ使用でき、システムや実時間のその他の概念とは関係ありません。返される値は、固定されているが任意の起点時刻からのナノ秒を表します(おそらく将来的には、値が負になる可能性があります)。同じオリジンが、Java仮想マシンのインスタンスでのこのメソッドのすべての呼び出しで使用されます。他の仮想マシンインスタンスは、異なるオリジンを使用する可能性があります。

このメソッドはナノ秒の精度を提供しますが、必ずしもナノ秒の解像度(つまり、値が変更される頻度)ではありません。解像度が少なくともcurrentTimeMillis()の解像度と同じである場合を除いて、保証は行われません。

タイムスタンプ(currentTimeMillis)との結合は提供されず、固定解像度も提供されません。

あなたの場合、Javaは以前よりも高い解像度のタイマーを利用できるようになったようです。そのため、システム時間を使用する必要はありません。

于 2012-04-05T10:28:16.193 に答える