ここ教えて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はスレッドセーフなのでしょうか?
No.2ベストアンサー
- 回答日時:
insert内の処理でスレッドセーフでないクラスを使用すればスレッドセーフでなくなります。
したがってクラスが完成するまでスレッドセーフであるかないかはわかりません。
修正ひとつでスレッドセーフだったクラスも、そうでなくなります。
スレッドセーフの判断基準を自分で理解し、完成したクラスを見て判断するしかないですね。
No.1
- 回答日時:
FooService.serviceがスレッドセーフか否かは中身がわからないので判断できません。
wikiにも書いてありますので参考にしてみてください。(スレッドセーフかどうかの判断基準)
http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%AC% …
簡単な例を言うと、staticな変数(クラス変数)をFooService.serviceが宣言していて、その変数を同期化等を行わず使用した場合はスレッドセーフにはなりません。
この回答への補足
説明不測でした。
FooServiceにstaticな変数(クラス変数)はありません。
FooService内は下記のようなイメージです。
FooService {
HogeDao dao;
insert() {
//insert処理
}
getDao() {
//ただのゲッター
}
setDao(HogeDao dao) {
// ただのセッター
}
}
また、URLのスレッドセーフかどうかの判断基準をみましたが、該当する項目はありせんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Java インスタンス ダウンキャストについて以下の解釈であっているか教えて欲しいです。 サブクラスをスーパー 1 2022/03/27 18:53
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/05/21 02:41
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- 友達・仲間 どちらに非がありましたか? 4 2023/05/21 09:58
- YouTube YouTubeの再生数カウントについて 今サブの使ってない端末が3つあり、その端末全て違うアカウント 2 2023/03/16 01:54
- YouTube YouTubeの再生数カウントについて 今サブの使ってない端末が3つあり、その端末全て違うアカウント 1 2023/03/07 19:31
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
VB.NET getとsetの概念がわかり...
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
フォームの存在をチェックする方法
-
文字列を日付に変換でParseExce...
-
他のファイルの変数参照
-
C#の構造体の開放のしかた
-
VB6.0で、DLLを動的に参照したい
-
c++の課題で クラスのオブジェ...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
C#において、同じインスタンス...
-
vb.netでFAXを送信する方法
-
Delphiでインスタンスが作成さ...
-
String a = "a"; と String b =...
-
SerialPort処理でInvokeメソッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
SQLを連続発行する時の正しい(?...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
エクセル(複数インスタンス)...
-
フォームの存在をチェックする方法
-
VB6.0で、DLLを動的に参照したい
-
String a = "a"; と String b =...
-
C#「オブジェクト参照が必要で...
-
newしないインスタンス?実体化...
-
「インスタンス」の意味をわか...
-
SetWindowsHookExで質問
-
フィールドでのnewとコンストラ...
おすすめ情報