プリセットJavaのスレッドプールがあります。newSingleThreadExecutor、newFixedThreadPool、newCacheedThreadPool、newScheduledThreadPool、newWorkStealingPool。ない場合は、カスタム・スレッド・プールを作成ThreadPoolExecutor使用することができます。主なコンストラクタ:
1 公共 ThreadPoolExecutor(INT corePoolSize、 2 INT maximumPoolSize、 3 長いkeepAliveTimeが、 4 TimeUnitでユニット、 5 BlockingQueueの<Runnableを> ワークキュー) 6 7 公共 ThreadPoolExecutor(INT corePoolSize、 8 INT maximumPoolSize、 9 長いkeepAliveTimeが、 10 TimeUnitでユニット、 11 BlockingQueueの<Runnableを> ワークキュー、 12 ThreadFactory threadFactory、 13 のRejectedExecutionHandlerハンドラ)
次に、我々はパラメータスレッドプールのサイズと、最初の4つのパラメータを導入します。
- corePoolSize:スレッドのコア数。
- ただ、スレッドプールを作成して、いや、それは事前に作成されません。ミッションが到着し、現在のスレッドがcorePoolSizeを超えていない場合は、他のスレッドがアイドル状態にある場合でも、タスクを実行する新しいスレッドを作成します。
- アイドルと、keepAliveTimeがNAをリリースされることはありません。
- maximumPoolSize:スレッドの最大数。前述したように、キューがいっぱいであるか、チームを超えた状況が、それは並ばない場合、現在のスレッドがよりcorePoolSizeを超える場合、最初の試みは、整列するが、スレッドの数がmaximumPoolSizeが、ない場合は、スレッドの数になるまでスレッドを作成するかどうかをチェックしますmaximumPoolSizeに達します。
- keepAliveTimeが:アイドルスレッドの生存期間。場合corePoolSizeよりスレッドプールの大きい内のスレッドの数、生存の追加のアイドル状態のスレッド。一度場合、新しいタスクがスレッドを解放しません。0の値は、スレッドがタイムアウトを解放しないであろうことを示しています。
- 単位:
- BlockingQueueの:キューを遮断します。あなたはLinkedBlockingQueue(無制限デフォルト)、ArrayBlockingQueue、PriorityBlockingQueue(無制限)、SynchronousQueue(実際のない収納スペース)を使用することができます。アンバウンド形式のキューを使用して、あなたがcorePoolSizeは、新しいタスクのみをラインアップできるスレッドの最大数、maximumPoolSizeを無意味に、に注意を払うまで必要です。ばかりのアイドルスレッドを持っているSynchronousQueue、チームはそれがmaximumPoolSizeに達するまでは、常に、新しいスレッドを作成し、それ以外の場合は、成功するでしょう。
- ハンドラー:ジョブ拒否ポリシー。有界キュー、maximumPoolSizeに到達するスレッドの数は、キューがいっぱいの、トリガータスクは、ポリシーを否定します。4つのプロセス:AbortPolicy(デフォルトでは、例外をスロー)、DiscardPolicy(例外をスローしていない、新しいタスクを無視する)、DiscardOldestPolicy(最長待ち時間、自身のキューイングを捨てる)、CallerRunsPolicy(タスクの提出者スレッドがタスクを実行します)
有界ベストカスタム作成スレッドプールのキュー、タスクがポリシーを拒否使用して、maximumPoolSizeを制限しました。キューが無制限である場合は、常にサービスタスク、メモリ消費量をラインアップ、さらにはメモリ例外にはつながりません。キューが有界が、maximumPoolSizeのワイヤレスされている場合は、メモリとCPUを占め、あまりにも多くのスレッドを作成することがあります。