2011-06-06 12 views
3

1つのスレッドが異なる間隔でスケジュールされた複数のタスクを担当するようにしたい。スケジューラにタスクを追加したり、スケジューラからタスクを削除したりしたい。これを手伝ってくれる図書館はありますか?そうでない場合、私は自分自身をコーディングして、ホイールを再構成したくありません。1つのスレッドで複数のタスクをスケジュールする

バックグラウンドについてアプリケーションの残りの部分でスケジュールされたタスクを追加/削除できる単一のスレッドから制御され、アプリケーションにアラートを追加したいと考えています。私は複数のTimerTaskを使うことも、自分のシングルスレッドスケジューラを書くこともできますが、もっと良いオプションがあればそれを見逃したくありません。

James

答えて

0

チェックアウトQuartz。 Javaでのタスクスケジューリングにはかなりの時間がかかります。ドキュメントを突き抜けば、シングルスレッドになるように設定できます。

1

基本ライブラリが必要な場合は、内蔵のScheduledExecutorServiceを使用できます。これにより、繰り返すタスクを追加して取り消すことができます。シングルスレッドに設定することができます。

4

JDK 1.5以降ですぐに利用できるものが必要な場合は、ScheduledExecutorServiceを見ましたか?

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html

あなたは、このファクトリメソッドを使用して、単一のスレッドに裏打ちされたこれらのいずれかを、作成することができます。

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/Executors.html#newSingleThreadScheduledExecutor()

としてThreadFactoryを受け入れる代わりのファクトリメソッドもあります引数。これにより、ScheduledExecutorService内で実行されるスレッドをカスタマイズする機会が与えられます。たとえば、Thread.setNameを呼び出してスレッドに意味のある名前を付けることができます。これは、アプリケーションのデバッグに非常に役立ちます。完全なスレッドダンプを生成すると、JVMによって自動的に追加された汎用名ではなく、カスタム名がスレッドに付加されて表示されます。

必要に応じて、このスレッドがJVMシャットダウンをブロックしないように、Thread.setDaemon(true)を呼び出すことも適切な場合があります。

また、ExecutorServiceを終了した後、ExecutorService.shutdownまたはExecutorService.shutdownNowを呼び出すことで、ExecutorServiceをクリーンアップすることをお勧めします。シャットダウン(finallyブロックなど)の保証された呼び出しがなければ、アプリケーションにスレッドリークバグを導入する可能性があります。あなたの使い方から、これがあなたを噛まれることはありえないと思われますが、私は誰かにExecutorServiceを使用するよう勧めるときはいつもこのことを強調したいと思います。この点はJavaDocsから簡単に見逃せません。

関連する問題