私は過去数時間でそれについてかなり読んでいましたが、何十もの異なるエグゼキューターサービスを格納する巨大なアプリケーションがない限り、shutdown()
.ExecutorService
長い間使用。
(私が収集したものから)シャットダウンが行う唯一のことは、通常のスレッドが完了したら行うことです。通常の Thread が Runnable (または Callable) の run メソッドを終了すると、Garbage Collection に渡されて収集されます。Executor Service を使用すると、スレッドは単に保留にされ、ガベージ コレクションのためにチェックされることはありません。そのためには、シャットダウンが必要です。
私の質問に戻ります。shutdown をExecutorService
非常に頻繁に呼び出す理由、またはいくつかのタスクを送信した直後に呼び出す理由はありますか? 誰かがそれを行っているケースを残しておき、その直後にawaitTermination()
これが検証されたときに呼び出します。ExecutorService
それをしたら、同じことをするために、もう一度新しいものを作り直さなければなりません。ExecutorService
スレッドを再利用するという全体のアイデアではありませんか? では、なぜExecutorService
すぐに破壊するのでしょうか。
単純に作成する (または必要な数に応じて結合する) のは合理的な方法ではないExecutorService
でしょうか。次に、アプリケーションの実行中にタスクを渡してから、アプリケーションの終了時またはその他の重要な段階でそれらのエグゼキューターをシャットダウンします。 ?
ExecutorServices を使用して多くの非同期コードを記述している経験豊富なコーダーからの回答が欲しいです。
2 つ目の副次的な質問ですが、Android プラットフォームに関するもう少し小規模な取引です。毎回エグゼキュータをシャットダウンするのは最善のアイデアではないと言う人もいれば、Androidでプログラムを実行する場合、さまざまなイベントを処理するときに、これらのシャットダウンをどのように処理するのですか(具体的には、それらを実行するとき)教えてください。アプリケーションのライフサイクルの。
CommonsWare のコメントのため、投稿を中立にしました。私はそれについて死ぬほど議論することに本当に興味がありません、そしてそれはそこにつながっているようです. 私がここで経験豊富な開発者に尋ねた内容について知りたいのは、経験を共有してくれるかどうかだけです。ありがとう。