まず、スレッドプールの分類は、シーンとその(個人的なメモ)との差を使用します
① newCachedThreadPool:リサイクルされていない場合、アイドル状態のスレッドを再利用するために、長い治療必要がある場合よりも、新しいスレッドを柔軟にスレッドプールをキャッシュスレッドプールを作成します
下の分析は:corePoolSizeは0であり; 60LにkeepAliveTimeが; maximumPoolSizeにInteger.MAX_VALUEあるユニットがTimeUnit.SECONDSあり、ワークキューがSynchronousQueue(同期キュー)であります
使用シナリオ:短期の非同期アプレットの実行や負荷の軽いサーバーの多く
これは、人気の説明です:新しいタスクが来るとSynchronousQueue同期キューは、あなたがスレッドことができれば、プール内の使用可能なスレッドを実行することになりますので、使用可能なスレッドがスレッドを作成しないがあれば、実行され、SynchronousQueueに挿入しますこのタスクを実行するために、指定したサイズよりも多くのスレッドプールがアイドル状態の場合は、スレッドが破棄されます。
② newFixedThreadPool:固定サイズのスレッドプールを作成し、あなたが同時スレッドの最大数を制御することができ、余分なスレッドは、キュー内で待機します
下の分析:ThreadPoolExecutorインスタンスを返すが、受信されたパラメータの数がcorePoolSize nThreadように、スレッドの集合nThread、maximumPoolSizeがnThreadであり; keepAliveTimeがが0L(オープン)である単位として:TimeUnit.MILLISECONDS;ワークキューとして:新しいLinkedBlockingQueue <Runnableを>()キューを遮断する解決策ありません
使用シナリオ:長期的なタスクの実装、はるかに優れた性能
人気のスピーキング:池を作成するスレッドの固定数を収容することができ、生存期間のすべてのスレッドは池がスレッドを追加しないでいっぱいになったとき、無限ですが、プール内のすべてのスレッドがビジー状態であれば、新しいミッションが入りますブロッキングキュー(アンバウンド形式のブロッキングキュー)
③ newSingleThreadExecutor:シングルスレッドのスレッドプールを作成するために、それだけですべてのタスクが指定された順序(FIFO、LIFO、優先度)で行われることを保証するために、タスクを実行するために単一のスレッドで動作します
下の分析: ThreadPoolExecutor例FinalizableDelegatedExecutorService包装、corePoolSizeは1であり; maximumPoolSizeは1であり; keepAliveTimeがが0Lであり;単位である:TimeUnit.MILLISECONDS;などのワークキュー:新しいLinkedBlockingQueue <Runnableを>()キューのブロックを解除することなく
:シーンを使用したタスクを実行するタスクのシーン
人気のスピーキング:スレッドプールだけつのスレッド、および生存期間のスレッドを作成し、無限であり、スレッドがビジー状態のとき、新しいタスクがブロッキングキュー(アンバウンド形式のブロッキングキュー)を入力します
④ newScheduledThreadPool:定期的かつ定期的なタスクの実行の固定長のスレッドプールのサポートを作成します
下の分析:ScheduledThreadPoolExecutorのインスタンスを作成し、渡されたパラメータのcorePoolSizeがmaximumPoolSizeはInteger.MAX_VALUEであり; keepAliveTimeが0であり、単位は、次のとおりTimeUnit.NANOSECONDS;などのワークキュー:新しいDelayedWorkQueue()ソートされたキュー・タイムアウト昇順
利用シーン:定期的なタスクのシーン
人気のスピーキング:無制限の固定サイズのスレッドプール、スレッドプールのスレッドの生存期間を作成するために、すべてのスレッドが新しいタスクのためにビジー状態であれば、定期的かつ定期的なタスクの実行をサポートするために、スレッドプールがDelayedWorkQueueキューに入りますが、これタイムアウト時間順序キュー構造に従って
第二に、タスク実行スレッド・プール・プロセスの分析:
スレッドプールがcorePoolSize未満の場合1)、この時点で空きスレッド・プールがあっても、タスクを実行する新しいスレッドを作成する新しいタスクを提出します。
2)スレッドプールがcorePoolSizeに達すると、新しいタスクを送信ワークキュー、実行のためにスケジュール待機中のスレッドプールのタスクを配置されます
3)完全なワークキューとmaximumPoolSize> corePoolSizeは、新たに提出されたタスクは、タスクを実行するための新しいスレッドを作成するとき
タスクの数を提出するとき4)maximumPoolSizeを超える、のRejectedExecutionHandlerにより処理新しいタスクを提出
スレッドプールのスレッドがcorePoolSize、keepAliveTimeがに到達するまでのアイドル時間を超えると5)、アイドル状態のスレッドをシャットダウン
allowCoreThreadTimeOut(真)に設定する場合6)、corePoolSizeのアイドルスレッドプールスレッドもkeepAliveTimeが閉鎖しました