- ベストアンサー
JSPのスレッドセーフについて
Strutsを用いて開発しております。 「スレッドセーフにするように」と言われ、 JSPのコードを見ると<% %>で囲まれた部分がありました。 こちらで他の質問を見させていただいたときは 「<%! %>で囲まれた部分はインスタンス変数として扱われる」 とあったのですが、<% %>で囲まれた部分に定義された変数は ローカル変数なのでスレッドセーフであると考えて 間違いないでしょうか? (JSPから生成されたjavaコードを見ると、_jspServiceメソッドの中で 定義されていました。)
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#94983
回答No.1
Strutsは、Action自体がスレッドセーフではないため、ローカル変数以外はスレッドセーフは保証されない。基本的にローカル変数であればスレッドセーフにはなる。だから、とりあえずは問題ないと考えていいと思う。ただし、あくまで「とりあえず」は、だ。なぜなら、ローカル変数のオブジェクトから参照されるすべてのオブジェクトがスレッドセーフを保証されているとは限らないからだ。 ローカル変数でオブジェクトを扱っているとしても、そこからインスタンス変数に保管されているオブジェクトを参照して動いているような場合には、おおもとのインスタンス変数がスレッドセーフを保証されていないために最終的にローカル変数のオブジェクトそのものもスレッドセーフが保証されなくなってしまう、という可能性はある。そうした問題を含んではいないか、チェックは必要だろうと思う。もし含んでいるようなら、それらを利用する部分だけ排他的ロックするとか考える必要はあるだろう。
お礼
ご回答ありがとうございました。 インスタンス変数を持っているクラスであっても ローカルにてオブジェクト化すれば、 スレッドセーフかと思い込んでいました。 勉強になりました。