図1は、実行者のトップレベルインターフェーススレッドプールは、唯一の方法があります
2、ExecutorServiceの:本当のスレッドプールインターフェース
1)ボイド(Runnableをコマンド)を実行します。一般的にのRunnableを実行するために使用されるミッション/コマンド、ノーリターン値
2)<T>未来<T>提出する(呼び出し可能<T>タスクは):タスクを実行し、戻り値は、再び一般呼び出し可能を行います
3)空シャットダウン():スレッドプールを閉じます
3、AbstractExecutorService:ExecutorServiceの基本的な道具すべてのメソッド
4、ThreadPoolExecutor :デフォルトスレッドプールの実装クラス
5、ScheduledThreadPoolExecutorのは:定期的なタスクスケジュールスレッドプールを実装します
6、エグゼキュータ:ツール、スレッドプールのクラスファクトリ作成すると、スレッドプールの異なるタイプのリターン
1)Executors.newCachedThreadPool():必要に応じて新しいスレッドを作成するスレッドプールを作成します。
2)Executors.newFixedThreadPool(n)は、スレッドプールのスレッドの再利用可能な一定数
3)Executors.newSingleThreadExecutor():スレッドプールを作成するための1つのスレッドだけ
4)Executors.newScheduledThreadPool(n)は:所定の遅延後に実行するコマンドをスケジュールすることができ、又は定期的に実行するスレッドプールを作成します。
図7に示すように、スレッドプールパラメータThreadPoolExecutor
公共ThreadPoolExecutor(int型corePoolSize、 int型maximumPoolSize、 長いkeepAliveTimeが、 TimeUnitでユニット、 BlockingQueueの<Runnableを>ワークキュー、 ThreadFactory threadFactory、 RejectedExecutionHandlerハンドラ){ } |
- corePoolSize:コア・プールのサイズ
- それはタスクを実行するスレッドを作成し、後にタスクがあるときに、デフォルトした後、それは、スレッドプールのスレッド数が0である作成されます。
- スレッドプール内のスレッドの数がcorePoolSizeに達した場合でも、ミッションは、キュー待ちに到着します。
- maximumPoolSize:スレッドの最大数。
- スレッドの数を自動的にcorePoolSizeとmaximumPoolSizeの間にリリースされますが、あまりcorePoolSizeは解放されません。この値はタスクよりも大きい場合に廃棄処理機構によって処理されるであろう。
- keepAliveTimeが:タスクは、スレッドを終了しませんどのくらいまで保持した後
- デフォルトはcorePoolSizeとmaximumPoolSize間のスレッドに制限されています
- TIMEUNIT:
- keepAliveTimeが時間単位
- BlockingQueueの:
- 実行待ちキューに格納作業をブロックする、オプションの数は、シーケンシャルキュー、キュー・チェーンなどであってよいです。
- ThreadFactory
- スレッドの工場出荷時のデフォルトはDefaultThreadFactory、エグゼキュー静的な内部クラスであります
- RejectedExecutionHandler:
- 戦略処理タスクが拒否されました。スレッドプールのスレッドがすでに飽和し、タスクキューは、新しいタスクがいっぱいですされている場合はどのような戦略を取る必要があります。
- たとえば、例外は、キュー内の最も古いタスクを破棄し、直接捨てスローされ、デフォルトでは直接スローです。
1、CallerRunsPolicy:あなたは、スレッドプールがまだ実行されていることが判明した場合、直接このスレッドを実行します
2は、DiscardOldestPolicy:スレッドプール、削除使い捨てヘッド、およびそれらに、現在のスレッドにキューで待機しています。
3、DiscardPolicy:何もしません
4、AbortPolicy:java默认,抛出一个异常: