0

Guice を使用していますが、質問があります。シングルトンのサーブレットがあります。JVM にこのクラスのインスタンスが 1 つしかないのか、それともセッション スコープのインスタンスが 1 つしかないのか? そして、このクラスへの同時アクセスはどうなるでしょうか?

4

3 に答える 3

0

実際、Guiceはシングルトンとして管理するサーブレットを必要とします。

注: すべてのサーブレット (またはフィルター) は @Singleton である必要があります。クラスに直接注釈を付けることができない場合は、filter() または servlet() ルールとは別に bind(..).in(Singleton.class) を使用してバインドする必要があります。他のスコープでのマッピングはエラーです。これは、サーブレット仕様との一貫性を維持するためです。Guice サーブレットは非推奨の SingleThreadModel をサポートしていません。

このドキュメントから)

同時アクセスを正しく処理する責任があります。

于 2013-07-11T16:54:27.793 に答える
0

サーブレット リソースの同時実行アクセスに問題がある可能性があります。サーブレットコンテナはそれを適切に処理し、リクエストごとに新しいスレッドを生成し、そのサーブレット参照を渡し、リクエストが処理されます。

また、単一のメモリ空間の使用を確認するサーブレットをシングル スレッドにすることをお勧めします。これにより、コンテナが軽量になります。デフォルトですべての Bean がシングルトンである春に利用できる同じ概念。

于 2013-07-11T07:58:05.427 に答える
0

Guice についてはよくわかりませんが、コンテナは、サーブレットが悪を実装しない限り、仕様に従って、DD の定義ごとに JVM ごとにサーブレットのインスタンスが 1 つだけ存在するようにしSingleThreadModelます。requestコンテナは、メソッドを呼び出して、それぞれに対して新しいスレッドを生成しますservice()

さらに、クラス変数とインスタンス変数はスレッドセーフではありません。ローカル変数のみがスレッドセーフになります。

于 2013-07-11T07:58:28.837 に答える