私はシングルトンクラスを持っています:
public class School {
private HashMap<String, String> students;
private static School school;
private School(){
students = new HashMap<String, String>();
}
public static School getInstance(){
if(school == null){
school = new School();
}
return school;
}
//Method to add student
protected void addStudent(String id, String name){
students.put(id,name);
}
//Method to remove student
protected void removeStudent(String id){
students.remove(id);
}
}
上記のように、シングルトン クラスにはstudents
変数 (a HashMap
) があり、クラスに学生を追加および削除するメソッドがあります。
School
私のアプリケーションでは、このクラスを使用してgetInstance()
、学生を追加および削除する複数のスレッドが存在する可能性があります。アクセス(特に students
インスタンスへのアクセス)をスレッドセーフにするために、次のようにメソッドにsynchorized
キーワードを使用することを考えています:getInstanc()
public synchronized static School getInstance(){
if(school == null){
school = new School();
}
return school;
}
しかし、私の些細な変更は、マルチスレッド環境で作成されるインスタンスが1 つだけであることを確認できると思います。 複数のスレッドによるインスタンスへのアクセスに対してもスレッドセーフにするSchool
ために、他に何をする必要がありますか。良い提案やコメントをお待ちしております。 students