Table of Contents
스레드 안전은 다중 스레드 테스트 응용 프로그램에 중요 한 단일 톤 패턴을 설계 하는 것은 클래스의 하나 인스턴스를 생성 하는 데 중요 한, 심지어 여러 스레드를 만들려고 하는 경우 동시에. 이 문서는 스레드 안전 단일 톤 패턴 구현에 대 한 모범 사례와 일반적인 기술을 탐구 합니다.
Singleton 패턴 이해
단일톤 패턴은 단일 객체에 클래스의 즉석을 제한합니다. 그것은 종종 데이터베이스 연결 또는 구성 설정과 같은 공유 리소스를 관리하는 데 사용됩니다. 다중화 환경에서 네이티브 싱글톤 구현은 패턴의 목적을 물리 치고 여러 인스턴스로 이어질 수 있습니다.
다방 환경의 도전
여러 스레드가 인스턴스를 동시에 만들려고 할 때, 인종 조건이 발생할 수 있습니다. 적절한 동기화 없이, 여러 스레드는 인스턴스 확인을 통과하고 여러 개체를 만들 수 있습니다. 스레드 안전에 대한 관리는이 레이스 상태를 방지하는 전략을 포함한다.
더블 체크 잠금
이 기술은 잠금을 취득하기 전에 이미 존재하는 경우 검사하여 동기화 오버 헤드를 감소시킵니다. 동기화 된 블록과 내부 하나 밖에있는 두 가지 검사가 포함됩니다. Proper 구현은 배타적 변수가 필요합니다.
예 (Java):
private 정적 휘발성 싱글턴 인스턴스;
공동 싱글턴 getInstance() {
if (instance == null) {]]
동기화 (Singleton.class) {
if (instance == null) {]]
인스턴스 = 새로운 싱글턴();]
]
]
]
반환 인스턴스;
]}
초기화 수요 홀더 Idiom
이 접근법은 명시된 동기화 없이 실 안전을 보장하기 위해 클래스 로딩 메커니즘을 활용합니다. 단일 톤 인스턴스는 필요한 경우만 로드되는 배열된 정적 클래스 내에서만 진행됩니다.
예 (Java):
개인 정적 클래스 홀더 {]
개인 정적 단면 INSTANCE = 새로운 단면();]
]}
공동 싱글턴 getInstance() {
리턴 홀더.INSTANCE;
]}
Thread Safety에 대한 모범 사례
- 초기화에 수요 홀더 idiom을 사용하여 단순성과 효율성을 제공합니다.
- Singleton 인스턴스를 두 배 검사한 잠그기를 사용하는 경우 선언된 휘발성입니다.
- 성능 향상을 위한 불필요한 동기화를 피하십시오.
- 다중 상태 하에서 단일 톤 구현을 완전히 테스트 합니다.
관련 기사
스레드 안전 단 하나 톤 패턴을 구현하는 것은 동기화 기술의주의적인 고려 사항이 필요합니다. 초기화 수요 홀더 idiom은 깨끗하고 효율적인 솔루션을 제공하지만 이중 검사 잠금은 적절한 휘발성 사용과 유연성을 제공합니다. 최고의 관행은 다중화 응용 분야에서 신뢰할 수있는 단일 톤 동작을 보장합니다.