4

I want to have a single thread maintain responsibility for multiple tasks scheduled at different intervals. I want to add and remove tasks from the scheduler. Are there any libraries that can help me with this. If not I will code my own just don't want to reinvent the wheel.

For background I want to add alerting to my application, controlled from a single thread where the rest of the application can add/remove scheduled tasks. I can use multiple TimerTask's or write my own single threaded scheduler but if there is better option I don't want to overlook it.

James

4

3 に答える 3

5

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.shutdown または ExecutorService.shutdownNow を呼び出して、ExecutorService の処理が完了したらクリーンアップすることをお勧めします。(finally ブロックなどで) シャットダウンの呼び出しが保証されていないと、アプリケーションにスレッド リークのバグが発生する可能性があります。あなたが説明した使用法からすると、これがあなたを噛む可能性は低いように思えますが、ExecutorService の使用を誰かに勧める際には、常にこれを強調したいと思います。JavaDocs からこの点を見落としがちです。

于 2011-06-06T16:28:16.383 に答える
1

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

于 2011-06-06T16:26:48.603 に答える
0

クォーツをチェックしてください。これは、Java でのタスク スケジューリングの頼りになるツールです。ドキュメントを調べれば、シングルスレッドに設定できます。

于 2011-06-06T16:20:02.233 に答える