2012-01-23 17 views
1

私はcron4jを使って30分ごとにタスクを実行するようにスケジュールしています。ただし、同じタスクの前のインスタンスがまだ実行されている場合は、タスク実行の2番目のインスタンスを実行しないことをお勧めします。 私は、ExecutorのisLive()やjoin()のようなメソッドがあることを知っていますが、目的を達成するためにそれらを使用する適切なメソッドが不明です。Cron4Jでシーケンスを適用する

答えて

0

逐次処理を希望します。その場合、2つのcron4jタスク、プロセスパラメータを生成するrask、およびパラメータを処理するタスクの間の 'パイプ'としてqueueを使用することをお勧めします。

パラメータを準備し、-----キューに入れる< ----- cron4j(task2、おそらく10分間隔)は、これからパラメータを読み取り、それに応じて処理します。

cron4jのタスク2では、キューからパラメータを処理した後、終了する前にキューの内容を再度確認し、新しいものがあれば処理を続行できます。

このアプローチでは、物事は順番に処理され、2つのタスクはキューオブジェクトとインターフェースするため、疎結合されます。

キューにjava.util.Queueを使用できます。

+0

ご迷惑をおかけして申し訳ありません。私はあなたの応答の可能な通知を逃した。 – Bokhari

+0

Infact、私はプロセスしか持っていませんが、それは30分ごとに実行されるようにスケジュールされています。最初のプロセスが実行されているときに、同じプロセスの2番目のインスタンスのオーバーランを制御したいだけです。テーブルAからテーブルBに30分ごとにデータをコピーすることを前提とします。スケジュールされたプロセスは午前8時に開始されました。それは30分以上かかりましたが、午前8時30分にスケジュールは同じプロセスを開始します。このオーバーランを実際にどのように制御するか? – Bokhari

+0

@ボカハリ:私の答えで述べたように、あなたのスケジューラーのプロセスはファイルのコピーではなく、タスクオブジェクトを作成し、タスクオブジェクトをキューに追加して、タスクキューと呼んでください。そして、別のスケジューラがあります。プロセスは、タスクキューに新しいタスクがあるかどうかを確認し、タスクを取得し、キューから削除し、タスクを処理します。ファイルのコピーが完了していなくても新しいタスクが追加されていても、まだ処理中の2番目のスケジューラは、キューから新しいタスクをフェッチする前に完了するまで待つ必要があります。 – bertie

関連する問題