21

各 HTTP 要求は同じサーブレット オブジェクトにアクセスしますが、異なるスレッドでアクセスしますか? それとも、新しいスレッドと新しいサーブレット インスタンスを作成しますか?

4

2 に答える 2

15

サーブレットが を実装していない場合、コンテナーは同じサーブレット インスタンスを使用しますSingleThreadModel。そうしないと、同じServletオブジェクトがヒットするという保証はありません。コンテナは、必要に応じて自由に追加のサーブレット インスタンスを作成できます。ただし、リクエストは別のスレッドで行われ、必ずしも新しく作成されたわけではありません (Sanjay が述べたように)。

サーブレット 3.0 仕様から:

分散環境 (デフォルト) でホストされていないサーブレットの場合、サーブレット コンテナーは、サーブレット宣言ごとに 1 つのインスタンスのみを使用する必要があります。ただし、SingleThreadModel インターフェイスを実装するサーブレットの場合、サーブレット コンテナーは複数のインスタンスをインスタンス化して、重い要求の負荷を処理し、要求を特定のインスタンスにシリアル化することがあります。

...

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

于 2012-09-20T09:42:52.317 に答える
9

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

EDIT:1つのサーバーノードの場合、そのノードに同じサーブレットインスタンスがあります。負荷分散/多数のサーバーの場合、通常は Java VM ごとに 1 つのインスタンスがあります。

于 2012-09-20T09:36:27.670 に答える