Java TimerとExecutorServiceの違いは?質問する

Java TimerとExecutorServiceの違いは?質問する

を使用してタスクをスケジュールするコードがありますjava.util.Timer。 いろいろ調べていたら、でもExecutorService同じことができることがわかりました。 質問ですが、タスクをスケジュールするためにTimerとを使用しましたか? どちらかExecutorService一方を使用することで、もう一方を使用するよりもどのような利点がありますか?

Timerまた、誰かがこのクラスを使用して、何か問題に遭遇し、それを解決したかどうかも確認したいと思いましたExecutorService

ベストアンサー1

によるとJava の並行処理の実践:

  • Timerシステムクロックの変化に敏感になる可能性がある、ScheduledThreadPoolExecutorそうではない。
  • Timerには実行スレッドが 1 つしかないため、長時間実行されるタスクは他のタスクを遅延させる可能性があります。 はScheduledThreadPoolExecutor任意の数のスレッドで構成できます。さらに、必要に応じて、作成されたスレッドを完全に制御できます ( を提供することによりThreadFactory)。
  • でスローされたランタイム例外により、TimerTaskそのスレッドが 1 つ強制終了され、Timerデッドになります :-( ... つまり、スケジュールされたタスクは実行されなくなります。ScheduledThreadExecutorランタイム例外をキャッチするだけでなく、必要に応じてそれらを処理することもできます (afterExecuteからメソッドをオーバーライドすることによりThreadPoolExecutor)。例外をスローしたタスクはキャンセルされますが、他のタスクは引き続き実行されます。

ScheduledThreadExecutorの代わりにを使用できる場合はTimer、そうしてください。

もう1つ... ScheduledThreadExecutorJava 1.4ライブラリでは利用できませんが、JSR 166 ( java.util.concurrent) の Java 1.2、1.3、1.4 へのバックポートScheduledThreadExecutorクラスを持っています。

おすすめ記事