プロが教えるわが家の防犯対策術!

Strutsを用いて開発しております。
「スレッドセーフにするように」と言われ、
JSPのコードを見ると<% %>で囲まれた部分がありました。
こちらで他の質問を見させていただいたときは
「<%! %>で囲まれた部分はインスタンス変数として扱われる」
とあったのですが、<% %>で囲まれた部分に定義された変数は
ローカル変数なのでスレッドセーフであると考えて
間違いないでしょうか?
(JSPから生成されたjavaコードを見ると、_jspServiceメソッドの中で
 定義されていました。)

A 回答 (1件)

Strutsは、Action自体がスレッドセーフではないため、ローカル変数以外はスレッドセーフは保証されない。

基本的にローカル変数であればスレッドセーフにはなる。だから、とりあえずは問題ないと考えていいと思う。ただし、あくまで「とりあえず」は、だ。なぜなら、ローカル変数のオブジェクトから参照されるすべてのオブジェクトがスレッドセーフを保証されているとは限らないからだ。

ローカル変数でオブジェクトを扱っているとしても、そこからインスタンス変数に保管されているオブジェクトを参照して動いているような場合には、おおもとのインスタンス変数がスレッドセーフを保証されていないために最終的にローカル変数のオブジェクトそのものもスレッドセーフが保証されなくなってしまう、という可能性はある。そうした問題を含んではいないか、チェックは必要だろうと思う。もし含んでいるようなら、それらを利用する部分だけ排他的ロックするとか考える必要はあるだろう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

インスタンス変数を持っているクラスであっても
ローカルにてオブジェクト化すれば、
スレッドセーフかと思い込んでいました。

勉強になりました。

お礼日時:2009/04/14 09:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!