• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:サーブレッドでのローカル変数はスレッドセーフだと聞きましたが、)

サーブレッドでのローカル変数のスレッドセーフ性はオブジェクト型にも当てはまるのか?

このQ&Aのポイント
  • サーブレッドでのローカル変数はスレッドセーフだと聞きましたが、オブジェクト型のローカル変数にもそれは当てはまるのでしょうか。
  • ユーザAとユーザBが同時にアクセスした場合、例えば実行クラスのTestBeanオブジェクトのsetNameメソッドで設定した名前は上書きされてしまうのでしょうか?
  • 質問文章の要点は、サーブレッドでのローカル変数のスレッドセーフ性がオブジェクト型にも当てはまるか、特に実行クラスのTestBeanオブジェクトのsetNameメソッドの並行アクセスによる名前の上書きについてです。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

「newで作成したオブジェクトは常に別物」です。 #そのためのnewですから どんなケースであろうと、その先に共通する参照先がないのであれば変更が競合することはありません。 この場合、nameがクラスメンバ変数、即ちstaticでない限りは競合は発生し得ないと思いますが。 ちなみに、doPost()の結果自体は共通のところに書きこむ事になるはずですから、そこで変更が競合する可能性はもちろんあります。

nanairo777
質問者

お礼

詳しく解説していただき、ありがとうございます。

その他の回答 (1)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

えーと、このコードだとそもそもユーザAのtestBeanとユーザBのtestBeanはオブジェクトが別物なので上書きのしようがないと思いますが……?

nanairo777
質問者

補足

回答ありがとうございます。 ではdoGetメソッド内でtestMethodを実行した場合でも、TestBean.setNameでセットした 値が上書きされる心配はないでしょうか? public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ TestClass testClass = new TestClass(); testClass.testMethod(); }

関連するQ&A

専門家に質問してみよう