싱글 톤 패턴은 시스템에 클래스의 인스턴스 만 있으면 객체 제작 패턴입니다.
Java 언어에는 다음과 같은 두 가지 이점이 있습니다.
1. 자주 사용되는 객체의 경우 객체 생성에 소비 된 시간을 생략 할 수 있습니다.
2. 새로운 작업의 수가 감소하기 때문에 시스템 메모리 사용 빈도가 줄어서 GC의 압력을 줄이고 GC 일시 중지 시간이 단축됩니다.
싱글 톤 패턴 세분화 :
1.
공개 클래스 싱글 톤 {private singleton () {system.out.println ( "Singleton.singleton ()"); } 개인 정적 싱글 톤 싱글 톤 = 새로운 싱글 톤 (); 공개 정적 싱글 톤 GetInstance () {return singleton; }}참고 : 먼저, 싱글 톤 클래스에는 싱글 톤이 다른 시스템 코드에 의해 인스턴스화되지 않도록하기 위해 개인 액세스 레벨 생성자가 있어야합니다. 둘째, 싱글 톤 멤버 변수 및 getInstance () 메소드는 정적이어야합니다.
이 싱글 톤 클래스는 만들기가 매우 간단하며 신뢰할 수 있습니다. 유일한 단점은 싱글 톤을 잠재적으로로드 할 수 없다는 것입니다. 예를 들어, 싱글 톤 생성 프로세스는 매우 느리고 멤버 변수는 정적으로 정의되므로 JVM이 싱글 톤 클래스를로드 할 때 싱글 톤 객체도 생성됩니다. 그런 다음 싱글 톤 객체가 사용되는지 여부에 관계없이 싱글 톤 객체가 싱글 톤 클래스가 사용되는 곳마다 만들어집니다. 예를 들어:
공개 클래스 싱글 톤 {private singleton () {system.out.println ( "Singleton.singleton ()"); } 개인 정적 싱글 톤 싱글 톤 = 새로운 싱글 톤 (); 공개 정적 싱글 톤 GetInstance () {return singleton; } public static void createString () {System.out.println ( "Singleton.createstring ()"); }} 2. 관련 기능의 통화 속도를 향상시키기 위해서는 게으른 하중 메커니즘을 도입해야합니다.
package com.luchao.singtonle; public class Lazysingleton {private lazysingleton () {system.out.println ( "Lazysingleton.lazysingleton ()"); } private static lazysingleton lazyinstance = null; 대중 동기화 된 정적 Lazysingleton getInstance () {if (LazyInstance == null) LazyInstance = 새로운 Lazysingleton (); Lazyinstance를 반환합니다. }}정적 변수 싱글 톤 초기화 할당이 무효화되어 시스템이 시작될 때 추가로드가 없도록합니다. getInstance () 메소드에서는 현재 인스턴스가 이미 존재한다고 결정됩니다. 존재하면 돌아옵니다. 존재하지 않으면 싱글 톤이 생성됩니다. getInstance ()는 다중 스레드 환경에서 스레드 1이 싱글 톤을 구축하고 할당이 완료되기 전에 인스턴스가 널 님이 null을 결정할 수 있으므로 스레드 2가 새로운 싱글 톤을 만들어 여러 싱글 톤이 생성 될 수 있기 때문에 getInstance ()는 동기식 방법이어야합니다.
위의 예제 싱글 톤 구현은 지연된 하중을 구현하지만 동기화 방법을 도입하여 다중 스레드 환경에서 첫 번째 싱글 톤 프로그램보다 훨씬 더 많은 시간이 걸립니다.
3. 싱글 톤 패턴은 내부 클래스를 사용하여 싱글 톤 생성을 유지합니다.
Public Class StaticSingleton {private staticsingleton () {System.out.println ( "Staticsingleton.staticsingleton ()"); } 개인 정적 클래스 싱글 톤 홀더 {private static stanticsingleton ataticsingleton = 새로운 staticsingleton (); } public static stanticsingleton getinstance () {return singletonholder.ataticsingleton; }}스탯 팅글 턴이로드되면 내부 클래스가 인스턴스화되지 않으므로 통계 소재 클래스가 JVM에로드 될 때 싱글 톤 클래스가 초기화되지 않으며 getInstance () 메소드가 호출 될 때 싱글 톤 홀더가로드되어 인스턴스를 초기화 할 때 싱글 톤 홀더가로드됩니다. 또한 클래스가로드 될 때 인스턴스를 만드는 데 사용되므로 자연스럽게 스레드 친화적입니다.
내부 클래스를 사용하여 단일 비영리 모드를 완료하면 지연된 하중을 달성 할 수있을뿐만 아니라 동기 키워드를 사용할 수 있습니다. 비교적 완전한 접근법입니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다.