2016-04-24 27 views
-4

私は、30分実行する予定のタイマークラスを持っています。土曜日から午前12時まで、毎日午前0時に実行するタイマークラスがあります。Javaタイマーは1時間ごとに終了します。土曜日 - 土曜日

どうすればいいですか?

ありがとうございました。

+0

java.util.Timer、javax.swing.Timerなどについてお話ししていますか? –

+0

@StephenC私はjava.util.Timerについて言及しています。指定しないと申し訳ありません。 – quibblify

答えて

0

java.util.Timerクラスは、この使用して繰り返しタスクを実行する機能を持っていない:

  • あなたは>>
  • 与えられた時間に繰り返しタスクを実行するための実行モデルを< <を停止するTimerを構成することはできません繰り返されるタスクは「固定遅延実行」です。つまり、新しいタスクは、前のタスクのエンドポイントに基づいてスケジューリングされる。その結果、時間のずれが発生します。

簡単な解決策は以下のとおりです。

  • が必要な範囲内の各時間に開始、48個の別々のタスクをスケジュールするループ内で単一Timerオブジェクト
  • 使用schedule(TimerTask task, Date time)を作成します。

Timerはスケーラブルであり、多くのスケジュールされたタスクに効率的に対処できる必要があります。


上記の説明では、各タスクが30分間実行されるという要件は考慮されていません。実際に何を意味するのかは不明ですが、のタスクを実行する場合は、 30分を超えないようにしてください。タスクが実行されているときにタスクを実行するスレッドを中断するウォッチドッグを実装する必要があります。タスクは、スレッド割り込みを適切にチェックおよび/または処理するために実装する必要があります。

-1

あなたはループを走らせることができ、そのループの中でただ1時間スリープするか、長い間あなたが望むだけです。この作品のようなものはありますか?

for(int i = 0; i < 24; i++) { 
    // do whatever you want to do 
    try { 
    // Sleep for an hour 
    Thread.sleep(6000000); 
    catch(InterruptedException e) { 
    e.printStackTrace(); 
    } 
} 

私はイェーイ...その後...質問を誤解...しかし、それはあなたが望んだ場合しているのでしょうか?