スレッドセーフ?スレッドアンセーフ?
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) ・・・"
}
}
お礼
ありがとうございます。 Singletonというのがあるのですね。 調べて何となく理解出来ました。 DTOに何百件もデータを入れるので、スレッドセーフじゃないとデータが書き換えられてしまうのではないかと思いました。 Singletonで作るようにしてみます。
補足
Singletonを作りましたが、DTOのインスタンスが1つしか出来ないので使えないことが分かりました。 スレッドセーフというのはそういう意味ではなくて、複数のスレッドで動いても問題が起きないということです。