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