ここで同様の質問がありましたが、満足のいく答えはありませんでした。質問をもう一度言い換えると-
定期的に(たとえば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:00AMであるとします。何らかの理由でシステム時刻を10:00AMにロールバックすると、タイマーは11:00 AMに達するまでタスクの実行を停止しますが、Thread.sleep()メソッドは支障なくタスクの実行を続行します。これは、これら2つの間で何を使用するかを決定する際の主要な意思決定者になる可能性があります。