- ベストアンサー
Struts2のスレッドセーフについて
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
その(HashMapのような)オブジェクトのスコープが、リクエストならばフィールド変数であっても問題ないです。 セッションなどスコープを拡大する場合は、Struts2のスレッドセーフの意味がなくなり、実装を考慮する必要があります。
関連するQ&A
- サーブレット、Strutsのスレッドの動きについて
ここ教えてgooでもこの類の質問は多いですが、現在ある問題に直面しています。過去の質問を見てもピンと来るものがなかったので、2つ質問させてもらいます。 1. 1リクエスト1インスタンスではないことは過去の質問やブログでもわかりました。ということは1リクエスト(サブミット)1スレッドという解釈でよろしいでいいと思います。これを踏まえて例えさせてください。 10台の端末からほぼ同時に同一アクションへサブミットした場合、1つのインスタンスから10スレッドが生まれるということでいいでしょうか?今直面している問題は、トークンチェック等2重サブミット対応をしていない状態で、1台の端末(自分)でサブミットを連打した場合(例えば10回)、10台の端末から同時アクセスした場合と同じ状況になるのでしょうか? 2. 以下はソースのイメージです。 // アクションクラス BarAction継承クラス { execute { ~中略~ HogeLogic logic = new HogeLogic(); logic.doLogic(); ~中略~ } } // ロジック HogeLogicクラス { //インスタンス変数 FooService service=new FooService(); doLogic { ~中略~ service.insert(); ~中略~ } } 分かりづらかったら申し訳ないです。 言いたいことはBarAction#execute内でHogeLogicクラスを生成しています。ということは生成されたHogeLogicのインスタンス(logic)はスレッドセーフだと思います。 しかしHogeLogicクラスではFooService.serviceがインスタンス変数として宣言されています。 この場合、FooService.serviceはスレッドセーフなのでしょうか?
- ベストアンサー
- Java
- JAVAのスレッドセーフとは
スレッドセーフについて質問です。 インスタンス変数はヒープ領域に保持されるのでスレッドセーフではないという説明は分かりました。 しかし、そうするとDTOのようにgetterとsetterを持ってるクラスはインスタンス変数ばかりなので、スレッドセーフではないということになるのでしょうか? スレッドセーフなDTOを作りたいときは、どのようにすれば良いのでしょうか?
- 締切済み
- Java
- サーブレット スレッドセーフについて
サーブレットのインスタンス変数、クラス変数はスレッドセーフではありませんが、 doGet などのほかに勝手に作ったメソッドは、スレッドで動作するのでスレッドセーフと考えていいでしょうか?
- ベストアンサー
- Java
- スレッドセーフとはどういう意味ですか?
このメンバはスレッドセーフです。 ただし、インスタンスメンバの場合は、スレッドセーフとは限りません。 マルチスレッド対応のクラスで使用すると、値が保証できないということですか?
- ベストアンサー
- Visual Basic
- JSPのスレッドセーフについて
Strutsを用いて開発しております。 「スレッドセーフにするように」と言われ、 JSPのコードを見ると<% %>で囲まれた部分がありました。 こちらで他の質問を見させていただいたときは 「<%! %>で囲まれた部分はインスタンス変数として扱われる」 とあったのですが、<% %>で囲まれた部分に定義された変数は ローカル変数なのでスレッドセーフであると考えて 間違いないでしょうか? (JSPから生成されたjavaコードを見ると、_jspServiceメソッドの中で 定義されていました。)
- ベストアンサー
- Java
- スレッドセーフにするべきクラスについて。
スレッドセーフにするべきクラスについて。 マルチスレッドで動くクラスはスレッドセーフにしなければならない。 とよく聞きます。ですが、どのクラスがマルチスレッドで動くのかどうかを判定する基準がよく分かっていません。 例えばサーブレットやJSP、Springでシングルトンにしたクラスなどは、スレッドセーフを意識しないといけないんだなと分かります。あとはThreadを拡張したクラスもそうなんだろうと思っています。 ただそれ以外のクラスでスレッドセーフを意識しなければならない場合、どこをみて判断すればよいのでしょうか?サーブレットから呼ばれるアクションクラスはスレッドセーフにしなければいけない・・・? そこのところがよくわかっていないため、クラスを作成する際にメンバ変数に状態を保持する変数を入れて良いんだろうかと悩んでしまいます。 申し訳ありません。アドバイスを頂けると嬉しいです。
- ベストアンサー
- Java
- スレッドセーフなクラス一覧
スレッドセーフなクラス一覧が分かるWebサイトや、そのクラスがスレッドセーフかどうか知る方法を探しています。 複数スレッドで共有オブジェクトにアクセスする際に、synchronizedブロックをかけるのですが、そのオブジェクトがスレッドセーフかどうかすぐに分かる方法があると便利だなぁと思って探しています。 例えば、Stringはスレッドセーフ、SimpleDateFormatはアンスレッドセーフ等の情報が一覧で欲しいと思っています。 なるべく多くのクラスを網羅していればそれだけありがたいです。 ご存知の方がおられましたら教えてください。 よろしくお願いします。
- ベストアンサー
- Java
- スレッドセーフ?スレッドアンセーフ?
Struts2にてスレッドセーフを勉強しており 以下のコードがスレッドセーフなのか、それともスレッドアンセーフなのかご意見を頂きたいと思います。 個人的な意見ですが、インスタンス変数を利用しているためスレッドアンセーフになるのではないかと思いますが間違いございませんでしょうか。 //以下 Struts2 public class InsertProgram extends ActionSupport implements ServletRequestAware{ private Test test = new Test(); private String id; private String name; public class execute(){ id = request.getParameter("id"); name = request.getParameter("name"); //以下がご意見を頂きたい箇所です。 test.setId(id); test.setName(name); test.insert(); return SUCCESS; } } public class Test{ private String id; private String name; public String getId() { return id; } public String getName() { return name; } public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public class insert() { //割愛致します。 データベースにid 及び name をinsert します。 sql = "Insert into test_db(id , name) ・・・" } }
- ベストアンサー
- Java
- スレッドセーフについて
サーブレットの本にスレッドセーフを考慮してサーブレッドはプログラミングしろと書いてありました。 そこで疑問が発生しました。 1 JSPの場合はスレッドセーフって関係ないのですか? 2 Beanを使った場合そのBeanはスレッドセーフを考慮する必要があるのですか? よろしくお願いします。
- 締切済み
- Java
- スレッドの削除について
永久ループのあるスレッドがあって、必要なくなったら、永久ループをブレイクさせようと思ってました。このスレッドのクラスのグローバル変数 boolean kaijo; があって、普段は false でブレイクさせたいときだけ、 true にしようと思ってました。このクラスはインスタンス化しているので、 オブジェクト.kaijo=true; という風にして、スレッドをブレイクさせようと思っていましたが、なぜかkaijoはfalseのままです。確かに オブジェクト.kaijo=true; と代入したはずなのですが、、どう思われますか? またスレッドを停止、あるいは破棄するメソッドはありますか?推奨されている範囲内で。
- ベストアンサー
- Java
お礼
ご回答ありがとうございます。 スコープには気を付けたいと思います