2012-09-20 8 views
16

各HTTP要求は同じサーブレットオブジェクトにアクセスしますが、別のスレッドにアクセスしますか?または新しいスレッドと新しいサーブレットインスタンスを作成しますか?各リクエストは同じサーブレット・オブジェクトにアクセスしますか?

+0

リクエストに応じてサーブレットをインスタンス化しないのはなぜですか? –

+0

[サーブレットはどのように動作しますか?インスタンス化、セッション変数、マルチスレッド](0120)を参照してください。 – BalusC

答えて

12

サーブレットがSingleThreadModelを実装していない場合、コンテナは同じサーブレットインスタンスを使用します。 それ以外の場合、同じServletオブジェクトにヒットしたという保証はありません。必要であれば、コンテナはより多くのサーブレット・インスタンスを作成できます。しかし、要求は別々のスレッドで発生し、必ずしも新たに作成されるわけではありません(Sanjayが述べたように)。

サーブレット3.0仕様から:分散環境(デフォルト)でホストされていないサーブレットの

、サーブレット コンテナはサーブレット宣言ごとに1つのインスタンスのみを使用する必要があります。しかしながら、サーブレット がSingleThreadModelインタフェースを実装する場合、サーブレットコンテナは、 複数のインスタンスをインスタンス化して、重い要求の負荷を処理し、要求 を特定のインスタンスにシリアライズすることがあります。

...

一般的にWebコンテナは、異なるスレッド上のサービスメソッドの 同時実行することにより、同じサーブレットに同時要求を処理します。

7

各HTTP要求は新しいスレッドを作成しますが、サーブレットの同じインスタンスにアクセスします。

EDIT:1つのサーバーノードの場合、そのノードで同じサーブレットインスタンスが使用されます。ロードバランシング/多数のサーバの場合、通常、Java VMごとに1つのインスタンスがあります。

+6

私はそれが本当に*常に新しいスレッドを作成*します。より多くのものは、既存のスレッドプールから空きスレッドを取得します。 –

+1

@ SanjayT.Sharmaそうです(パフォーマンス上の理由から)これはしばしばこのように行われますが、これはアプリケーションサーバー/サーブレットコンテナの実装の詳細であり、コードはそれに依存してはなりません –

関連する問題