0

バックグラウンドで継続的に実行されるJavaサービスを作成しています。サービスの仕事は、特定の日付にテーブルのコピーを作成することです。正確には、いくつかのテーブルからデータを読み取り、テーブルの record_date が現在の日付と一致する場合は、テーブルのコピーを作成する必要があります。その後、サービスは次の実行日までスリープする必要があります。次回の実行日も、テーブル内のレコードを参照して決定されます。

現在、これを行う方法は、while(true) ループで実行されるスレッドを作成することです。スレッドがタスクの実行、つまりテーブルコピーの作成を終了したら、次に実行する必要があるまで Thread.sleep() を使用してスレッドをスリープ状態にします。スレッドがスリープ状態になるまでのミリ秒数。現在の日付 (スレッドによってタスクが実行された日付) と次の実行日の差をとって計算します。

これは正しいアプローチですか?この特定のシナリオで thread.sleep() を使用するのは正しいですか? これは、スレッドの次の実行日が 3 か月後または 1 年後になる可能性があるためです。また、ここでよくわからない場合はお知らせください。

4

3 に答える 3

2

両方の操作を分析するのはどうですか?

  1. 呼び出し時にテーブル内の日付のチェックを行うJavaジョブを作成し、コピーを作成します。
  2. 実行したい方法で実行するようにJavaジョブをスケジュールします。

私たちUNIXcronは、そのようなタスクを実行するのに大いに役立ちます。

于 2012-10-16T14:06:47.467 に答える
0

Java Timer API または Quartz ライブラリを確認してください

于 2012-10-17T03:37:26.680 に答える
0

Lockインターフェイスを見てください。これは と の抽象化でwait()ありnotify()、 の代わりに使用する必要がありますsleep()

その理由を説明する答えがここにあります。

于 2012-10-16T14:19:48.993 に答える