문제

직장에서의 데이터 액세스 계층에서 우리는이 표준 구현이 있습니다.

public static CustomerController Instance
        {
            get 
            {
                lock(singletonLock)
                {
                    if( _instance == null )
                    {
                        _instance = new CustomerController();  
                    }
                    return _instance;
                }
            }
        }

이제 코드가 수행하는 일을 얻었지만 클래스가 사용될 때마다 수업 인스턴스를 만드는 것만으로 도이 작업을 수행하는 이유가 궁금했습니다.

도움이 되었습니까?

해결책

편집 : 오, 나는 "데이터 액세스 계층"부분을 잡지 못했습니다. 그러나 그 예도 있습니다. 멀티 스레드 앱이 싱글 톤 클래스를 통해 모든 '데이터베이스가 호출하는 경우, 한 스레드 만 레이스 조건을 피하기 위해 데이터베이스에 한 번에 액세스 할 수 있습니다.

멀티 스레드 애플리케이션에 모든 예외를 뱉어 내고 정보를 작성하는 데 사용하는 멀티 스레드 애플리케이션에 로깅 메커니즘이있는 경우 (특히 실행중인 서비스 또는 항상 실행중인 앱, 물건이 발생할 때마다 상태를 인쇄 할 경우) 파일에 실행됩니다. -고정 문제. 싱글 톤 로거 클래스를 사용하므로 하나의 스레드 만 로거에 액세스 할 수 있고 나머지는 로거가 텍스트 파일에 라인을 자유롭게 쓸 수있을 때까지 기다립니다.

싱글 톤을 사용해야 할 멋진 이유가 많이 있지만, 나는 당신과 같았으며 멀티 스레드 앱에서 파일 액세스 로이 문제를 해결하기 전까지는 그들이 무엇을했는지 전혀 몰랐습니다.

다른 팁

이렇게 할 수도 있습니다. 이중 점검 잠금 장치는 싱글 톤에 대한 액세스 속도가 빨라집니다.

 public static CustomerController Instance
        {
                get 
                {
                        if( _instance == null )
                        {
                           lock(singletonLock)
                           {
                                if( _instance == null )
                                {
                                        _instance = new CustomerController();  
                                }

                            }
                        }   
                        return _instance;
                }
        }

대답은 매우 간단합니다. 같은 사용될 때마다 물체.

그것은 당신에게 클래스 객체라는 장점과 함께 글로벌 변수 (즉, 하나만 있음)의 장점을 제공합니다 (무엇보다도 처음으로 필요할 때 보이지 않는 초기화를 수행 할 수 있습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top