2009-07-17 33 views
0

私たちは、Javaプログラムからpcクロックに注意を払う必要があります。このために、scheduleAtFixedRate()を500 msごとに使用してRunnableをスケジュールします。このたび、System.currentTimeMillis()を呼び出します。特定の許容デルタである500ミリ秒+より大きい差があることが分かったら、クロックが変更されたと仮定します(次に他のものを実行する必要があります)。scheduleAtFixedRateの精度はどのくらいですか?

これは正しい方法でしょうか? Linux上のテストでは、通常の操作で50msのデルタで十分であることが示されています。ウィンドウでは、100ミリ秒を増やす必要があります。それ以外の場合は、毎回のチェックで時間が変わったと考えています。

これを行う方法に関する他のアイデアはありますか?

答えて

2

目的は、クロックの変化を検出することであるならば、あなたはクロックを検出することができるでしょう絶対時刻ソースを使用して、ここでJava NTP client http://support.ntp.org/bin/view/Support/JavaSntpClient の詳細は

外観を参照するタイムサーバのノウハウに対する現在のクロックをテストします変更

+0

リンクいただきありがとうございますが、リンクされ問題になっているコメントは、すでにそれはナイーブな実装であると述べています。 –

0

あなたは、クラスTimerとTimerTaskを使用すると仮定します。

scheduleAtFixedRateの代わりにメソッドのスケジュールを使用できますか。 Dateを渡すメソッドスケジュールは、実行日のタスクを設定することができます。最後の実行の最後に再スケジューリングを続けることができます。 scheduleAtFixedRateのように、キャッチアップを実行しない遅延を渡すscheduleを使用することもできます。

javadoc Timer

+1

TimerとTimerTaskはかなり廃止されました。 ScheduledExecutorServiceはそれ以上のことを行います。 – skaffman

+0

はい、ScheduledExecutorServiceは私たちが使用しているものです。 –

関連する問題