各 HTTP 要求は同じサーブレット オブジェクトにアクセスしますが、異なるスレッドでアクセスしますか? それとも、新しいスレッドと新しいサーブレット インスタンスを作成しますか?
2 に答える
サーブレットが を実装していない場合、コンテナーは同じサーブレット インスタンスを使用しますSingleThreadModel
。そうしないと、同じServlet
オブジェクトがヒットするという保証はありません。コンテナは、必要に応じて自由に追加のサーブレット インスタンスを作成できます。ただし、リクエストは別のスレッドで行われ、必ずしも新しく作成されたわけではありません (Sanjay が述べたように)。
サーブレット 3.0 仕様から:
分散環境 (デフォルト) でホストされていないサーブレットの場合、サーブレット コンテナーは、サーブレット宣言ごとに 1 つのインスタンスのみを使用する必要があります。ただし、SingleThreadModel インターフェイスを実装するサーブレットの場合、サーブレット コンテナーは複数のインスタンスをインスタンス化して、重い要求の負荷を処理し、要求を特定のインスタンスにシリアル化することがあります。
...
通常、Web コンテナは、異なるスレッドでサービス メソッドを同時に実行することにより、同じサーブレットへの同時要求を処理します。
HTTP 要求ごとに新しいスレッドが作成されますが、サーブレットの同じインスタンスにアクセスします。
EDIT:1つのサーバーノードの場合、そのノードに同じサーブレットインスタンスがあります。負荷分散/多数のサーバーの場合、通常は Java VM ごとに 1 つのインスタンスがあります。