모든 사람이 이미 싱글 톤 모델에 익숙하다고 생각하며 구현 방법은 일반적으로 다음 두 가지 유형으로 나뉩니다.
코드 사본은 다음과 같습니다.
// 게으른 구현
공개 클래스 싱글 톤 {
개인 정적 싱글 톤 인스턴스 = null;
개인 싱글 톤 () {}
public static newinstance () {
if (null == 인스턴스) {
인스턴스 = 새로운 싱글 톤 ();
}
반환 인스턴스;
}
공개 void dosomething () {
// 뭔가 ...
}
}
// 배고픈 중국 스타일
공개 클래스 싱글 톤 {
개인 정적 싱글 톤 인스턴스 = 새로운 싱글 톤 ();
개인 싱글 톤 () {}
공개 정적 싱글 톤 NewInstance () {
반환 인스턴스;
}
공개 void dosomething () {
// 뭔가 ...
}
}
단일 이익 모드를 사용하면 게으르고 배고픈 스타일이 다른 응용 프로그램 시나리오를 사용하면 많은 메모리가 필요하지만 응용 프로그램을 시작할 때 필요하지 않습니다. 프로젝트가 시작될 때 즉시 사용하려면 프로젝트가 시작됩니다. 초기화에서 이글 모드를 사용하여 단일 혜택 개체를 생성합니다.
위의 두 모드에서는 멀티 스레드 인 경우 배고픈 남자 스타일에 문제가 없을 것입니다. JVM은 단일 관심 클래스를 한 번만로드 할 것이기 때문에 게으른 남자 스타일은 반복적으로 단일 관심을 창출하는 데 문제가있을 수 있습니다. 객체, 그것은 실이 안전하지 않다는 것입니다.
배고픈 남자 스타일의 스레드 안전의 단일 이익 모드를 만들 수있는 방법이 있습니까? 확실히 답이 있습니다. 사람들은 일반적으로 동기화 잠금 장치를 추가하여 구현하는 방법을 사용하지만이를 구현하기 위해 더 문제가됩니다. 대부분의 경우 JVM은 다음과 같은 동기화 제어를 제공했습니다.
a. 데이터 데이터는 정적 {} 블록에서 초기화되었습니다
b. 최종 필드에 액세스 할 때 등
JVM이 클래스를로드 할 때 데이터가 동기화되도록합니다.
클래스 수준 내부 클래스를 사용 하여이 내부 클래스에서 개체 인스턴스를 만듭니다. 이러한 방식으로 클래스 수준 내부 클래스를 사용하지 않는 한 객체 인스턴스를 만들지 않으므로 게으른 게으른로드 및 스레드 안전성을 달성합니다.
코드 사본은 다음과 같습니다.
공개 클래스 싱글 톤 {
// 내부 클래스, 간단한 관심 객체는 내부 클래스가로드 된 경우에만 생성됩니다.
개인 정적 클래스 싱글 톤 홀더 {
공개 정적 싱글 톤 인스턴스 = 새로운 싱글 톤 ();
}
개인 싱글 톤 () {}
공개 정적 싱글 톤 NewInstance () {
싱글 톤 홀더를 반환합니다.
}
공개 void dosomething () {
// 무언가를합니다
}
}
이것은 스레드 안전 단일 가격 모델을 실현할 수 있습니다.
또한 열거 형식을 통해 단일이자 모드를 구현할 수도 있으며, 이는 더 권장되는 방법입니다.
열거 유형을 사용하여 싱글 톤 패턴을 구현하는 것은 다음과 같습니다.
코드 사본은 다음과 같습니다.
공개 열거 싱글 톤 {
// 열거 된 요소를 정의하면 싱글 톤 인스턴스입니다.
사례;
공개 void dosomething () {
// 뭔가 ...
}
}
자, 싱글 톤 모드는 여기에 소개됩니다.