У меня есть класс одноплодный:переменного экземпляра в классе 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);
}
}
Как вы можете видеть выше, в классе одноплодного, у меня есть students
переменного (а HashMap
), есть способы для добавления & удалить ученика в классе.
В моем приложении может быть несколько потоков, используя этот класс School
до getInstance()
, а затем добавив & удаление ученика. Для того, чтобы сделать доступ (особенно доступ кstudents
например) быть поточно, я имею в виду использовать synchorized
ключевое слово для getInstanc()
метода, как:
public synchronized static School getInstance(){
if(school == null){
school = new School();
}
return school;
}
Но я думаю, что мое тривиальное изменение может только убедитесь, что только одинSchool
экземпляр создается в многопоточной среде. Что еще мне нужно сделать, чтобы сделать это потокобезопасным для доступа кstudents
экземпляр несколькими потоками также. Любое хорошее предложение или комментарий оспаривается, спасибо!
Читать это: http://stackoverflow.com/questions/11165852/java-singleton-and-synchronization –
Требуется ли ленивая инициализация? – chrylis
Да, ленивая инициализация - это требование – Mellon