まず、スレッドプールは何ですか?
プログラムは、治療に応答する複数のスレッドを起動したときに作成され、彼らは内部のワーカースレッドと呼ばれるスレッドプールのスレッドと呼ばれている
リソースの消費を減らすために:最初に。スレッドを再利用することにより、消費に起因するスレッドの作成と破壊を軽減するために作成されています。
第二:応答速度を向上させることができます。ミッションが到着すると、タスクは、スレッドの作成を直ちに実施することが可能になるまで待つ必要がないかもしれません。
第三に:スレッドの管理性を向上させます。
スレッドプールを作成する第二に、方法
1、newFixedThreadPool()メソッド:このメソッドは、この方法のスレッドプールスレッドの固定数を返し、直ちに実行されるスレッドプールアイドル場合は、ジョブの投入があった場合、必ずしも同じではない場合、それはなり実行するキューアイドルスレッドで待機中のタスクを一時停止します。
2、newSingleThreadExecutor()メソッド:アイドルスレッドが存在しない場合、アイドルが実行された場合、スレッドプールのスレッドを作成し、タスクキューに懸濁させます。
ないタスク場合、図3に示すように、newCachedThreadPool()メソッドを返すタスクは、スレッドを作成する場合、スレッドの最大数を限定するものではなく、スレッドプール内のスレッドの実際の数に応じて調整することができ、スレッドが作成されません。60年代の後に自動的にスレッド(アイドル時間60秒)を回復するタスクが存在しない場合。
4、newScheduledThreadPool()SchededExecutorServiceオブジェクトを返す方法が、スレッドプールのスレッドの数を指定することができます。
いくつかの方法がカスタムスレッドプールすることができThreadPoolExecutorクラスを、使用されています。設定は以下のとおりです。
第二に、カスタム・スレッド・プール
このクラスThreadPoolExecutorカスタム・スレッド・プールを使用する場合は、この工法はどのタイプキューのためのより重要です。
有界キューを使用する場合:新しいタスクを実行する必要がある場合は、スレッドプール内のスレッドの実際の数がcorePoolSizeよりも少ない場合、は、スレッドの優先順位を作成し、corePoolSizeを超える場合は、キューがいっぱいの場合、タスクは、キューに追加され、合計スレッド新しいスレッドの作成の前提maximumPoolSizeの数よりも大きい無下、maximumPoolSizeよりも多くの場合、戦略を実行することを拒否しました。または他のカスタム方法。
LinkedBlockingQueue:アンバウンド形式のキューで。有界キューと比較すると、システムリソースが使い果たされるまで、またはバインドなしタスク・キューは存在にタスクチームの場合に失敗していません。新しいジョブが到着すると、システムがcorePoolSizeは、新しいスレッドがタスクを実行するスレッドの数よりも少ないです。corePoolSizeに達した後、我々は増加していきません。フォローアップは、まだ新しいタスクを追加して、そしてアイドルスレッドリソース、待ちキューに直接タスクが存在しない場合。作成するタスクと処理速度が非常に異なっている場合は、アンバウンド形式のキューは、システムメモリを枯渇知って、急速な成長を維持します。
JDK拒否戦略:
AbortPolicy:直接スロー組織のシステムが正常に動作しています。
CallerRunsPolicyは:限り、スレッドプールが閉じていないと、呼び出し側のスレッドで直接政策は、現在のタスクが破棄されて実行されます。
DiscardOldestPolicy:再び現在のジョブを送信しようとすると、最も古い要求を破棄する。
DiscardPolicy:任意の治療を与えていない、処理できないタスクを捨てます。
RejectExecutiionHandlerインタフェースを達成するために:カスタム戦略を拒否しました。