Variable d'Instance dans une classe Singleton accessibles par plusieurs threads

J'ai une classe singleton:

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);
}
}

Comme vous pouvez le voir ci-dessus, dans la classe singleton, j'ai un students variable (un HashMap), il existe des méthodes pour ajouter & supprimer étudiant dans la classe.

Dans ma demande, il pourrait y avoir plusieurs threads à l'aide de cette School classe de getInstance() , puis les ajouter & retrait de l'étudiant. Pour rendre l'accès (en particulier l'accès à students instance) être thread-safe, je pense à utiliser synchorized mot-clé pour getInstanc() méthode, comme:

public synchronized static School getInstance(){
if(school == null){
school = new School();
}
return school;
}

Mais je pense que mon trivial changement ne peut faire que seuls les un School exemple être créé en multi-thread de l'environnement. De quoi dois-je faire pour le rendre thread-safe pour accéder à la students instance par plusieurs threads ainsi. Toute suggestion ou commentaire est appreicated, merci!

InformationsquelleAutor Mellon | 2013-09-22