1. ホーム

[解決済み】Java TimerとExecutorServiceの比較?

2022-04-15 08:32:04

質問

を使用してタスクをスケジュールするコードがあります。 java.util.Timer . いろいろ見ていたら ExecutorService も同じことができます。そこでこの質問ですが、あなたは TimerExecutorService を使用してタスクをスケジュールする場合、どちらを使用するのが良いのでしょうか?

また、誰かが Timer というクラスで、何か問題が発生した場合は ExecutorService が解決してくれました。

どのように解決するのですか?

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

  • Timer は、システムクロックの変化に敏感である可能性があります。 ScheduledThreadPoolExecutor はない。
  • Timer は実行スレッドが1つしかないため、長時間実行するタスクは他のタスクを遅らせることができます。 ScheduledThreadPoolExecutor は、任意の数のスレッドを設定することができます。さらに、作成されたスレッドを完全に制御することができます。 ThreadFactory ).
  • でスローされるランタイム例外は TimerTask はその1つのスレッドを殺し、その結果 Timer dead :-( ...つまり、スケジュールされたタスクはもう実行されません。 ScheduledThreadExecutor は、実行時例外を捕捉するだけでなく、必要に応じて例外を処理することができます。 afterExecute メソッドから ThreadPoolExecutor ). 例外を発生させたタスクはキャンセルされますが、それ以外のタスクは継続して実行されます。

もし ScheduledThreadExecutor の代わりに Timer は、そうしてください。

もうひとつ...一方 ScheduledThreadExecutor は Java 1.4 ライブラリでは利用できませんが JSR166のバックポート( java.util.concurrent ) を Java 1.2, 1.3, 1.4 に移植する。 を持つ。 ScheduledThreadExecutor クラスがあります。