2012-05-14 13 views
5

実行者は通常、(短期間)タスクの場合に使用されますが、長時間実行されているタスクを処理する最善の方法は何ですか。アプリケーションの存続期間中に実行する必要があるタスク長期実行タスクの実行方法

別のスレッドで実行されるタスクがX秒ごとにディレクトリをポーリングするアプリケーションがあるとします。アプリケーションが終了しない限り、このタスクは決してポーリングを終了しません。これをどのように開始して管理しますか?

new Thread(theLongRunningTask).start()はこのような悪いオプションですか?

答えて

5

これはExecutorsフレームワークのユースケースでもあり、具体的にはscheduleAtFixedRateです。アプリが終了したら、そのスレッドがぶら下がっていることに注意してください。デーモンスレッドを作成するカスタムThreadFactoryを使用することができます。または、より簡単なものをご希望の場合は、Timer APIを使用してください。ブーリアン引数を使用して "use daemon thread"を意味するTimerを構築することができます。また、アプリケーション終了時にエグゼキュータ・サービスを明示的にシャットダウンすることもできます。

+0

スレッドファクト+デーモンの代わりに、終了時にエグゼキュータをシャットダウンすることができます(送信されたタスクが中断しやすい、または常に実行されないと仮定)。 – assylias

+0

はい、私は同意します - 彼らはスレッド管理の面であなたのコントロールから簡単に飛び出ることができるので、デーモンスレッドはあまり好きではありません。 – Cowboy

関連する問題