• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaのタイマープログラムの時間について)

Javaのタイマープログラムの時間について

このQ&Aのポイント
  • Javaのタイマープログラムについて、起動時間と実際のタイマー時間の違いがあります。
  • タイマーの起動時間を1msに設定しており、1000回タイマーを起動することで、トータルのタイマー時間を1秒と考えています。
  • しかし、実際のタイマー時間は20秒ほどかかってしまいます。コメントをいただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Java の Timer 仕様は「指定された時間『以上』経過したことを保証する」だけで実際に 1ms の精度で正確にタスクが起動されることはほぼありません。実際 Swing のタイマーは Swing のバックグラウンド処理の影響で遅れを受けます。また、タイマーから呼び出された actionPerformed() の処理に 1ms 以上かかると次回のタスク起動が遅れます。それらの遅れが積み重なって20秒という時間がかかっていると思われます。 Java 標準の Timer は 1ms 精度が求められる処理を想定しておらず、本当にその精度が必要であれば Java RTS のような組込系のリアルタイム処理技術が必要になります。 ただ、実際にはそのような精度が求められる処理はまれで、例えば簡単なアニメーションであれば「16ms (約60fps) のタイマーを使用し、起動ごとに前回の起動からの時間 (16+アルファms) を計算してその分だけアニメーションを進める」といった方法で体感的に問題ないように実装します。

bakabon_X
質問者

補足

koiroha さま 早速の回答有難うございます。 使用者側とすれば、私が今回提示した程度のプログラムでは、1msは達成できなくても 2,3ms程度で割込みを実行できないかと考えています。 精度は全く必要ありません、つまりあるときは0.5msで動作し、次は3msで動作する、そして 偶には10msで操作するという具合でかまいません。 Timerの選択が間違っていたのかも知れませんね? いずれにせよ、回答有難うございました。

関連するQ&A