2011-12-25 4 views
1

私はEJB3.1 TimerServiceを使ってJavaでタイマーをスケジュールします。TimerService:同時に2つのタイマーインスタンスを実行しないようにする方法はありますか?

2つの同時タイマーインスタンスを実行しないようにする一般的な方法はありますか? 私のタイマーは5分ごとに起動します。何らかの理由でタイマーが5時に起動し、5時07分に実行を終了した場合、次回の5:12(または5時10分、5時05分のタイムアウトをスキップする)で実行します。 簡単に組み込む方法はありますか?

ありがとうございました

答えて

1

すべてを一度にスケジュールするのではなく、完了時にプロセスのスケジュールを変更してください。

また、他のジョブが実行されている間に1つのジョブをブロックする共有セマフォを持つこともできます。仕事が5分間完全に停止することは稀ですが、これは簡単な解決方法です。それが稀でない場合、タイマーは既にブロックされているジョブがあっても認識し続けるため、ジョブは積み重なり、同期が外れます。

+0

ありがとうございました。 TimerService.getTimers()の情報を使用することができますが、どうして見つからなかったかと思いました。 おそらく私は組み込みのものが見つからなければ、(静的変数フラグのような)セマフォーの解決法を使うつもりです。 – lili

+0

独自のセマフォをローリングするのではなく、シングルトンを使うことができます。書き込みメソッドによるコンテナ管理の同時実行性のデフォルトは、TimeoutメソッドまたはScheduleメソッドで機能します。 –

+0

シングルトンを使用することはできません。なぜなら、複数のインスタンスが実行されている可能性があるからです(ユーザーごとのインスタンス) – lili

関連する問題