Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)


14.8 ManagedExecutorServiceの動作

ManagedExecutorServiceのチューニングプロパティ設定値は,J2EEサーバ起動時にメッセージログに出力されるメッセージKDJE60811-Iで確認できます。

JNDI名の重複や不正値の使用などによって,ManagedExecutorServiceのJNDI名前空間への登録に失敗した場合は,J2EEサーバ起動時にメッセージログにKDJE60812-Eが出力され,スタックトレースが例外ログに出力されますが,J2EEサーバの起動処理は続行します。

ManagedExecutorServiceのスレッドプールは,該当するスレッドプールを使用するタスクの初回実行時に初期化され,corePoolSizeに指定した数のスレッドが生成されます。生成されるスレッドは,スレッド名が「<JNDI名>-managedThreadFactory」から始まる名称で,生成された順に通番が付きます。

スレッドプール内のスレッド数は,Java SE API「java.util.concurrent.ThreadPoolExecutor」の仕様に従い,corePoolSize, maxPoolSize, taskQueueCapacityの指定値に応じて自動的に調整されます。

実行中のスレッド数がcorePoolSize未満の場合は,新規タスクはすぐに開始されます。

実行中のスレッド数がcorePoolSize 以上maxPoolSize未満の場合は,新規タスクはキューに貯められ,スレッドプールが空くまで待機します。

キューが満杯になると新しいスレッドが作成されて,キューの先頭からタスクが実行されます。作成されるスレッドは最大でmaxPoolSizeまでとなります。

実行中のスレッド数がmaxPoolSizeに達していて,かつキューが満杯の場合は,新規タスクは拒否され,javax.enterprise.concurrent.ManagedExecutorServiceインタフェースのexecuteメソッドまたはsubmitメソッドからjava.util.concurrent.RejectedExecutionExceptionがスローされます。

corePoolSize と maxPoolSize を同じ値に設定すると,固定サイズのスレッドプールが作成されます。デフォルトではcorePoolSizeとmaxPoolSizeがともに16のため,プール数が16個固定のスレッドプールが生成されます。

ManagedExecutorServiceのスレッドプールはJ2EEサーバ停止時に破棄されます。破棄が完了するとメッセージログにKDJE60823-Iが出力されます。破棄処理時に何らかの例外が発生した場合は,メッセージログにKDJE60824-E,例外ログにスタックトレースが出力され,J2EEサーバ停止処理を続行します。

J2EEサーバ停止処理中に実行中のタスクが残っていた場合は,awaitTerminationSecondsの値に応じて,次の動作をします。