※ ChatGPTを利用し、要約された質問です(原文:サーブレット、Strutsのスレッドの動きについて)
サーブレット、Strutsのスレッドの動きについて
このQ&Aのポイント
サーブレット、Strutsにおけるスレッドの動きについて調査しています。1つめの質問は、1リクエスト1インスタンスではないことを確認しましたが、10台の端末からほぼ同時に同一アクションへサブミットした場合のスレッドの挙動が気になります。
2つめの質問は、BarActionクラス内で生成されたHogeLogicクラスのインスタンスがスレッドセーフかどうかについてです。HogeLogicクラス内で宣言されているFooService.serviceがスレッドセーフかどうかも知りたいです。
サーブレット、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はスレッドセーフなのでしょうか?
補足
説明不測でした。 FooServiceにstaticな変数(クラス変数)はありません。 FooService内は下記のようなイメージです。 FooService { HogeDao dao; insert() { //insert処理 } getDao() { //ただのゲッター } setDao(HogeDao dao) { // ただのセッター } } また、URLのスレッドセーフかどうかの判断基準をみましたが、該当する項目はありせんでした。