管理実行サービスおよび管理スケジュール実行サービスは受け付けたタスクを保持するためのキューと、受け付けたタスクを並列に実行するためのスレッドプールを持ちます。
管理実行サービスおよび管理スケジュール実行サービスが受け付けたタスクはいったんキューに入れられた後、スレッドプール内のスレッドによって取り出されて実行されます。
管理実行サービスのスレッドプールおよびキューのサイズは管理実行サービスの定義項目「コアプールサイズ」、「最大プールサイズ」および「キューサイズ」で設定できます。
管理スケジュール実行サービスのスレッドプールのサイズは管理スケジュール実行サービスの定義項目「コアプールサイズ」で設定できます。
管理スケジュール実行サービスのスレッドプールの最大プールサイズは設定できません。プールサイズの上限はコアプールサイズと同じです。
管理スケジュール実行サービスのキューのサイズは設定できません。キューのサイズに上限はありません。
管理実行サービスのタスクの処理
管理実行サービスは新しいタスクを受け付けた場合、以下の順序でタスクを処理します。
スレッド数がコアプールサイズより少ない場合、新しいスレッドを作成してタスクを実行します(注1)
1以外の場合かつ、キューに空きがある場合、キューにタスクを追加します。キューに追加されたタスクは、アイドル状態になったスレッドで実行されます(注2)
1,2以外の場合かつ、スレッド数が最大プールサイズより少ない場合、新しいスレッドを作成してタスクを実行します
それ以外の場合、タスクの実行を拒否します
注1) ただし、コアプールサイズが0の場合、かつ、スレッド数が0の場合、必ず新しいスレッドを作成してタスクを実行します。
注2) ただし、キューサイズが0の場合、または、キューサイズが2147483647かつコアプールサイズが0の場合、キューはタスクを保持することなく直接スレッドにタスクを受け渡します。
その場合、上記タスクの処理の順序の2.において、キューに空きがある場合にキュータスクを追加する代わりに、アイドル状態のスレッドが存在する場合にそのアイドル状態のスレッドでタスクを実行します。
注意
コアプールサイズより最大プールサイズが大きい場合、コアプールサイズを超える数のスレッドはキューに空きがなくなるまで作成されません。
参考
通常、キューサイズには、キューに必ず空きがあるように十分大きな値を設定することを推奨します。また、コアプールサイズと最大プールサイズには同じ値を設定することを推奨します。
管理スケジュール実行サービスのタスクの処理
管理スケジュール実行サービスは新しいタスクを受け付けた場合、以下の順序でタスクを処理します。
キューにタスクを追加します。キューに追加されたタスクは、アイドル状態になったスレッドで実行されます
スレッド数がコアプールサイズより少ない場合、新しいスレッドを作成してタスクを実行します
注意
スレッドプールのサイズの上限はコアプールサイズと同じになります。
コアプールサイズにが「0」の場合、コアプールサイズは「1」が指定されたものとして動作します。