ここで同様の質問をしましたが、満足のいく答えがありませんでした。質問をもう一度言い換えると
定期的に(たとえば1分間隔で)実行する必要があるタスクがあります。スリープ付きの無限ループを持つ新しいスレッドを作成するのではなく、Timertask&Timerを使用してこれを行う利点は何ですか?
timertask-を使用したコードスニペット
TimerTask uploadCheckerTimerTask = new TimerTask(){
public void run() {
NewUploadServer.getInstance().checkAndUploadFiles();
}
};
Timer uploadCheckerTimer = new Timer(true);
uploadCheckerTimer.scheduleAtFixedRate(uploadCheckerTimerTask, 0, 60 * 1000);
スレッドとスリープを使用したコードスニペット
Thread t = new Thread(){
public void run() {
while(true) {
NewUploadServer.getInstance().checkAndUploadFiles();
Thread.sleep(60 * 1000);
}
}
};
t.start();
ロジックの実行にインターバル時間以上かかる場合でも、特定のサイクルを見逃しても心配する必要はありません。
これについてコメントしてください。
更新:
最近、TimerとThread.sleep()の使用に別の違いが見つかりました。現在のシステム時刻が午前11:00であるとします。なんらかの理由でシステム時間を10:00 AMにロールバックすると、Timerは11:00 AMに達するまでタスクの実行を停止しますが、Thread.sleep()メソッドは問題なくタスクを実行し続けます。これは、これら2つの間で何を使用するかを決定する際の主要な意思決定者になる可能性があります。