다중 스레드에서 액세스하는 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변수 (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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

클래스 메서드를 호출하는 클래스의 인스턴스 변수에 액세스하려고합니다.

분류에서Dev

인스턴스 변수에서 클래스의 인스턴스에 액세스하는 방법

분류에서Dev

인스턴스 변수에서 클래스의 인스턴스에 액세스하는 방법

분류에서Dev

정적 메서드에서 다른 클래스의 인스턴스 변수에 액세스

분류에서Dev

동일한 변수에서 클래스의 다중 인스턴스화

분류에서Dev

다른 클래스의 변수에 액세스하는 방법

분류에서Dev

Python의 다른 인스턴스에서 인스턴스 변수에 액세스

분류에서Dev

특정 클래스 인스턴스에서 메서드를 호출하는 HTML 버튼은 인스턴스 값에 액세스 할 수 없습니다.

분류에서Dev

Swift의 Singleton은 다른 클래스에서 액세스 할 수 없습니다.

분류에서Dev

하위 클래스의 개인 필드는 수퍼 클래스에서 액세스 할 수 있습니다.

분류에서Dev

Swift 3-다른 클래스의 XIB 인스턴스에서 변수에 액세스

분류에서Dev

메서드를 통해 다른 클래스의 목록 변수에 클래스 인스턴스 추가

분류에서Dev

다른 클래스의 클래스 메서드 / 변수에 액세스

분류에서Dev

이 인스턴스 메서드는 다른 클래스에서 어떻게 액세스 할 수 있습니까?

분류에서Dev

클래스의 다중 변수 인스턴스에서 변수를 얻는 방법은 무엇입니까?

분류에서Dev

클래스 인스턴스 변수는 인스턴스 메서드에서`nil`로옵니다.

분류에서Dev

클래스에 속한 인스턴스 변수 중 하나에서 클래스의 특정 인스턴스를 가져 오는 방법

분류에서Dev

C ++ 클래스의 함수에서 다른 클래스 인스턴스화

분류에서Dev

다른 클래스의 개인 인스턴스 변수 값에 액세스하는 방법은 무엇입니까?

분류에서Dev

Java 다른 클래스의 인스턴스를 사용하여 메서드에 액세스하는 방법

분류에서Dev

다중 스레딩 환경에서 클래스의 인스턴스 수를 계산합니까?

분류에서Dev

다른 클래스에서 StatefulWidget의 State 클래스 변수에 액세스하는 Flutter

분류에서Dev

다른 인스턴스에서 동일한 클래스 변수?

분류에서Dev

양식 코드에서 클래스의 공용 인스턴스를 인스턴스화 할 수 없습니다.

분류에서Dev

양식 코드에서 클래스의 공용 인스턴스를 인스턴스화 할 수 없습니다.

분류에서Dev

서브 클래스의 Ruby 클래스 인스턴스 변수

분류에서Dev

Python은 클래스로 함수를 장식하고 클래스 인스턴스에 액세스합니다.

분류에서Dev

Singleton Unity에서 인스턴스 참조 오류로 인해 멤버 '<method>'에 액세스 할 수 없습니다.

분류에서Dev

신속하게 다른 클래스의 변수에 액세스

Related 관련 기사

  1. 1

    클래스 메서드를 호출하는 클래스의 인스턴스 변수에 액세스하려고합니다.

  2. 2

    인스턴스 변수에서 클래스의 인스턴스에 액세스하는 방법

  3. 3

    인스턴스 변수에서 클래스의 인스턴스에 액세스하는 방법

  4. 4

    정적 메서드에서 다른 클래스의 인스턴스 변수에 액세스

  5. 5

    동일한 변수에서 클래스의 다중 인스턴스화

  6. 6

    다른 클래스의 변수에 액세스하는 방법

  7. 7

    Python의 다른 인스턴스에서 인스턴스 변수에 액세스

  8. 8

    특정 클래스 인스턴스에서 메서드를 호출하는 HTML 버튼은 인스턴스 값에 액세스 할 수 없습니다.

  9. 9

    Swift의 Singleton은 다른 클래스에서 액세스 할 수 없습니다.

  10. 10

    하위 클래스의 개인 필드는 수퍼 클래스에서 액세스 할 수 있습니다.

  11. 11

    Swift 3-다른 클래스의 XIB 인스턴스에서 변수에 액세스

  12. 12

    메서드를 통해 다른 클래스의 목록 변수에 클래스 인스턴스 추가

  13. 13

    다른 클래스의 클래스 메서드 / 변수에 액세스

  14. 14

    이 인스턴스 메서드는 다른 클래스에서 어떻게 액세스 할 수 있습니까?

  15. 15

    클래스의 다중 변수 인스턴스에서 변수를 얻는 방법은 무엇입니까?

  16. 16

    클래스 인스턴스 변수는 인스턴스 메서드에서`nil`로옵니다.

  17. 17

    클래스에 속한 인스턴스 변수 중 하나에서 클래스의 특정 인스턴스를 가져 오는 방법

  18. 18

    C ++ 클래스의 함수에서 다른 클래스 인스턴스화

  19. 19

    다른 클래스의 개인 인스턴스 변수 값에 액세스하는 방법은 무엇입니까?

  20. 20

    Java 다른 클래스의 인스턴스를 사용하여 메서드에 액세스하는 방법

  21. 21

    다중 스레딩 환경에서 클래스의 인스턴스 수를 계산합니까?

  22. 22

    다른 클래스에서 StatefulWidget의 State 클래스 변수에 액세스하는 Flutter

  23. 23

    다른 인스턴스에서 동일한 클래스 변수?

  24. 24

    양식 코드에서 클래스의 공용 인스턴스를 인스턴스화 할 수 없습니다.

  25. 25

    양식 코드에서 클래스의 공용 인스턴스를 인스턴스화 할 수 없습니다.

  26. 26

    서브 클래스의 Ruby 클래스 인스턴스 변수

  27. 27

    Python은 클래스로 함수를 장식하고 클래스 인스턴스에 액세스합니다.

  28. 28

    Singleton Unity에서 인스턴스 참조 오류로 인해 멤버 '<method>'에 액세스 할 수 없습니다.

  29. 29

    신속하게 다른 클래스의 변수에 액세스

뜨겁다태그

보관