私はこれまで数時間でかなり読んでいましたが、にshutdown()
を呼び出すには何らかの理由(正当な理由)がありません。 、長年使用されていない数多くの異なるエグゼキュータサービスを提供しています。ExecutorServiceでshutdown()を呼び出す理由
シャットダウンは唯一のことです(私が収集したものから)、通常のスレッドはいったん完了したら何をしますか?通常のスレッドがRunnable(またはCallable)のrunメソッドを終了すると、そのスレッドはGarbage Collectionに渡されて収集されます。エグゼキュータサービスでは、スレッドは単に保留状態になり、ガーベジコレクションにはチェックされません。そのためにはシャットダウンが必要です。
私の質問に戻ってください。 ExecutorService
でシャットダウンを呼び出す理由はありますか、それともいくつかのタスクをサブミットした直後ですらありますか?私は誰かがそれをやっているケースの後ろに残しておきたいと思います。それが有効であるとawaitTermination()
への呼び出しの直後です。そのようにしたら、同じことをやり直すために、新しいExecutorService
をもう一度作り直さなければなりません。 ExecutorService
の全体のアイデアはスレッドを再利用するのではないのですか?では、なぜすぐにExecutorService
を破壊するのですか?
ExecutorService
(または必要な数に応じてカップル)を作成するのは合理的な方法ではありませんか、アプリケーションの実行中に実行した後にタスクを実行してから、アプリケーションの終了やその他重要な段階でそれらのエグゼキュータをシャット
私はExecutorServicesを使用して多くの非同期コードを書く経験豊富なコーダーからの回答を希望します。
第2の側面の質問は、少し小さくアンドロイドプラットフォームを扱います。エグゼクティブを毎回シャットダウンして、アンドロイドでプログラムするのがベストではないと言う人がいるかもしれませんが、あなたがそれらのシャットダウンをどのように扱うのかを教えてください。アプリケーションライフサイクル。
CommonsWareのコメントのため、私は投稿を中立にしました。私は本当に死に至るまで論争することに興味がなく、そこでは主導しているようだ。私は経験豊かな開発者からここに尋ねたことについて、彼らが自分の経験を共有したいと思っているかどうかを学ぶことにのみ興味があります。ありがとう。
"タスクをサブミットまたは実行した直後にshutdown()呼び出しが何度も表示されることが多い" - 何度もサンプルコードが表示されるため、これは、UIThreadが長い間待機する場合に発生するためです。ハイパーリンクを使用して、あなたの主張の証拠を提供してください。個人的には、あなたが宣言している「サンプルコード」は見たことがありません。あなたが何かを誤解している可能性があります。あなたが調べている「サンプルコード」がわかっている場合にのみ、それを指摘することができます。 – CommonsWare
こんにちはCommonsWare。まず第一に、私はここでは検証されていないと思うあなたの(またはそう思われる)激しいトーンを私に向かって見る。私は人を肖像画にしようとしていませんでした。あなたの見解については、私は主にThinking In Java IV版、マルチタスクの話をしていました。 Bruce Eckelの例では、その多くのインスタンスを見つけることができます。彼らはほとんどシンプルですが、ブルースが私に付けた印象は決して非常に頻繁にシャットダウンを使うことではありませんでした。いずれにせよ、あなたは私のポストの主要な部分ではなかったものに集中しました。私は本当にそれについて議論したくないので、それらの部分を削除しました。 – Lucas
hay @CommonsWare in Bruce Eckel。同時実行性/実行者ページ804第4版、ExecutorがLucasとしてどのように動作するかを説明するために、シンプルなアプリケーションでタスクをサブミットまたは実行した直後に、彼は常にshutdown()メソッドを使用します。 – Error