20.4.2 非デーモンWorkで使用するスレッドプールとキューについて
非デーモンWorkは,スレッドプールとキューを使用して処理されます。処理で使用されるスレッドプールおよびキューは,DDで定義したWorkManager単位で作成されます。なお,スレッドプールにプールできるスレッドの最大サイズを設定します。次に,非デーモンWorkがスケジュールされたとき,プールできるスレッドの最大サイズと,プール内のスレッド数の関係と動作について説明します。
-
プール内のスレッドが,スレッドプールの最大スレッド数より少ない場合
新しいスレッドを作成して,非デーモンWorkを実行します。なお,スレッドは,スレッドプールの中に空きスレッドがあるかどうかに関係なく,生成されます。
-
プール内に,スレッドプールの最大スレッド数で設定した数だけスレッドがある場合
スレッドプールの中の空きスレッドを使用して非デーモンWorkを実行します。空きスレッドがないときには,スケジュールされた非デーモンWorkはキューに格納されます。キューに格納された非デーモンWorkは,空きスレッドができると実行されます。
スレッドプールの最大スレッド数は,デフォルトで10となっています。最大スレッド数を変更したい場合は,「20.4.5 実行環境の設定」を参照してください。なお,キューサイズには制限はありません。
- ポイント
-
WorkManagerを停止しようとするときには,実行中のWorkManagerおよびキューに格納されたWorkManagerの処理がすべて終了されてから停止処理が開始されます。また,キュー格納時にWorkManagerが停止された場合でも,キューに格納されたWorkManagerは実行されます。