싱글 톤 클래스가 있습니다.
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;
}
하지만 내 사소한 변경만으로 다중 스레드 환경에서 하나의 School
인스턴스 만 생성 되도록 할 수 있다고 생각 합니다. 여러 스레드 가 students
인스턴스에 액세스 할 수 있도록 스레드를 안전하게 만들기 위해 다른 작업을 수행해야합니다 . 좋은 제안이나 의견이 있으면 감사합니다!
싱글 톤이 악한 지 아닌지에 대한 대화를 떠나 School
클래스 의 스레드 안전성 문제 만 고려해 보겠습니다 .
School
. 두 개의 인스턴스를 만들지 않으려면 동기화가 필요합니다 . 이 문제를 올바르게 식별하고 수정했습니다. 그러나 초기화하는 School
데 시간이 많이 걸리지 않으므로 열심히 getInstance()
초기화하여 사소한 게터를 만드는 것이 school = new School()
좋습니다.Student
개체를 받으면 동시에 수정을 시작할 수 있습니다. 따라서 Student
개체는 자체 동시성 보호가 필요합니다.이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다