
「servletはマルチスレッドを意識して実装しなくてはいけない」とよく聞きます。
マルチスレッドを意識しなければならないのは、HttpServletを継承したクラスのみなのでしょうか?
それとも、そこからインスタンス化される汎用クラスなどもマルチスレッドを意識し、インスタンス変数は悪とされるのでしょうか?
となると、汎用クラスのコンストラクタ引数に値を渡し汎用クラス内でインスタンス変数を使用するってコーディングは完全なNGになりますよね。
HttpServlet継承のサーブレットからインスタンス化されれば、都度個別のメモリが割り当てられると思うのですが・・。
ご存知な方いらっしゃいましたらご教授お願いいたします。
以上
No.2ベストアンサー
- 回答日時:
> (1)サーブレットとして動く全てのクラスを現しているのでしょうか?
> (たとえば、Strutsなどで動く個別アクションモジュールも含めるのか、の意です)
HttpServlet、Actionクラスです。
> (2)それともHttpServletを継承したクラスのことでしょうか?
> (インスタンス化される個別アクションモジュールは含まない)
Strutsの場合、Actionクラスを継承したクラスも初めて実行された時にインスタンス化されコンテナに常駐されます。以降の実行はこのインスタンスのスレッドとして実行されます。よってservletのインスタンス変数は共有されるので意識しないといけません。
・・回答になっているでしょうか?
No.3
- 回答日時:
まず、クライアントからのひとつひとつのリクエストが
スレッドとして実行される、ということを理解するべき
だと思います。
サーブレット内で new したオブジェクトは、
各リクエストごとに生成されますから、
スレッドを意識する必要はないのですが、
このオブジェクトをアプリケーションスコープなどに
格納し、任意のリクエストがそれにアクセス可能と
なるようなコードを書けば、そのオブジェクトのクラスは
スレッドセーフに作成しなければならなくなります。
No.1
- 回答日時:
servletは初めて実行された時にインスタンス化されコンテナに常駐されます。
以降の実行はこのインスタンスのスレッドとして実行されます。よってservletのインスタンス変数は共有されるので意識しないといけません。ただし、servletのメソッド内はローカルなのでbean等のスコープはそのメソッド内で完結します。
この回答への補足
早速のご回答ありがとうございます。
重ねて質問になりますが、Strutsさんがおっしゃる「servlet」の定義は
(1)サーブレットとして動く全てのクラスを現しているのでしょうか?
(たとえば、Strutsなどで動く個別アクションモジュールも含めるのか、の意です)
(2)それともHttpServletを継承したクラスのことでしょうか?
(インスタンス化される個別アクションモジュールは含まない)
お手数ですがお教えください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
C#において、同じインスタンス...
-
インスタンス参照でアクセスで...
-
クラスのインスタンス名をクラ...
-
フォームのCheck boxとOLEObjec...
-
C# インスタンスの破棄
-
C#の構造体の開放のしかた
-
JSPでの表示
-
SQLを連続発行する時の正しい(?...
-
Eclipse3でVisualEditorが起動...
-
VB.NET Newしたものを変数に代...
-
VB.NET getとsetの概念がわかり...
-
[VB.NET] インスタンス生成とイ...
-
エクセル(複数インスタンス)...
-
objective-cで分かりにくい所教...
-
「インスタンス」の意味をわか...
-
「タイプ初期化子が例外をスロ...
-
中学のクラス数
-
eclipse-Tomcatでのデバッグに...
-
【sendkeysメソッドが動かずに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インスタンス参照でアクセスで...
-
変数名の付け方
-
private static という変数の修飾
-
C#において、同じインスタンス...
-
複数の変数を宣言する時、同時...
-
オブジェクト参照がオブジェク...
-
VB.NET getとsetの概念がわかり...
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
生成したインスタンスを削除す...
-
文字列を日付に変換でParseExce...
-
次の日本語の意味を教えて下さい
-
C#「オブジェクト参照が必要で...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
[Visual C#] 優先される処理に...
-
newしないインスタンス?実体化...
-
C#の構造体の開放のしかた
-
javaのクラスの作り方、エラー...
おすすめ情報