※ ChatGPTを利用し、要約された質問です(原文:同時アクセス時の動作)
同時アクセス時の動作に関する疑問点
このQ&Aのポイント
質問文章では、同時アクセス時の動作についての疑問が述べられています。
特に、プログラム内での排他制御やスレッド処理が行われていないため、同時アクセス時における変数の挙動や結果についての不安があります。
また、SingleThreadModelを実装した場合の動作についても疑問があります。
以下のようにプログラムを作成した場合に
疑問点がありますので、ご教授願います。
public class Sample extends HttpServlet{
private static final int int_OK = 0; // 戻り値(OK)
private String name; // 名前
private String db_name; // DB名前
protected void doPost(HttpServletRequest req,HttpServletResponse res)
throws ServletException, IOException{
// リクエストパラメータ取得
name = req.getParameter("name"); // 名前
// DB検索
db_name = rs.getString("name");
// 結果を返却
}
}
【疑問点】
(1) 排他制御やスレッドを行っていません。
・変数はすべてprivate宣言していますが、
同時アクセスが行われた際の変数はどのようになるのでしょうか?
(2) SingleThreadModelを実装した際はどのような動きになりますでしょうか?
不足点などあるかと思いますが、よろしくお願いします。
お礼
お礼の欄にすみせん。 上記の内容が間違っていましたので訂正します。 public class Sample extends HttpServlet{ private static final int int_OK = 0; // 戻り値(OK) // private String name; // 名前 // private String db_name; // DB名前 protected void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{ SetterGetter setget = new SetterGetter(); // リクエストパラメータ取得 setget.name = req.getParameter("name"); // 名前 // DB検索 setget.db_name = rs.getString("name"); // 結果を返却 private class SetterGetter{ private String name; // 名前 private String db_name; // DB名前 private void setName(String name) { this.name= name; } private String getName() { return name; } private void setDb_name(String db_name) { this.db_name = db_name; } private String getDb_name() { return db_name; } } } 以下の処理で問題なく動作しますでしょうか? よろしくお願いします。
補足
ご回答ありがとうございます。 また、お礼が遅くなりまして申し訳ありません。 ここでまたひとつ質問ですが、 クラスを作成した場合はそのクラスはpublicになると思いますが、 同時にdoPostの要求がきた場合は値が書き換わることはないのでしょうか?