> Java > java지도 시간 > 본문

Java 싱글톤 패턴의 구현 방법 및 일반적인 작성 방법

PHPz
풀어 주다: 2023-04-27 16:19:07
앞으로
1415명이 탐색했습니다.

1. Hungry 모드

Hungry 모드는 클래스가 로드될 때 싱글톤 개체를 직접 생성하고 초기화하므로 스레드 안전 문제가 없습니다. ClassLoader 클래스 메커니즘을 사용하며 프로그램이 시작될 때 한 번만 로드되므로 스레드 안전 문제가 없습니다. 구현 코드는 다음과 같습니다.

public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {}
    // 2.通过私有变量保存单例对象
    private static Singleton instance = new Singleton();
    // 3.提供公共获取单例对象的方法
    public static Singleton getInstance() {
        return instance;
    }
}
로그인 후 복사

장점: 간단한 구현, 스레드 안전 문제가 없습니다. 단점: 클래스가 로드될 때 객체가 생성됩니다. 생성 후 사용하지 않으면 리소스 낭비가 발생합니다.

2. 게으른 모드

게으른 모드와 배고픈 모드는 정확히 반대입니다. 소위 게으른 로딩(lazy loading)은 처음 사용할 때만 초기화된다는 의미입니다.

구현 코드는 다음과 같습니다.

public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {}
    // 2.通过私有变量保存单例对象
    private static volatile Singleton instance = null;
    // 3.提供公共获取单例对象的方法
    public static Singleton getInstance() {
        if (instance == null) { // 第一次效验
            synchronized (Singleton.class) {
                if (instance == null) { // 第二次效验
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
로그인 후 복사

lazy 모드는 스레드 안전성을 보장하기 위해 이중 검증 잠금과 휘발성을 사용합니다 위의 코드에서 볼 수 있듯이, Hungry 모드인지 Lazy 모드인지는 알 수 없습니다. 구현 단계는 동일합니다.

  • 다른 호출이 새 개체를 직접 사용하지 못하도록 개인 생성자를 만들어 생성된 개체가 싱글톤 개체가 되지 않도록 합니다.

  • 싱글톤 개체를 보관할 개인 변수를 만듭니다.

  • 싱글톤 객체를 반환하는 공개 메서드를 제공하세요.

배고픈 모드에 비해 게으른 모드는 리소스 낭비를 일으키지 않지만 작성 방법이 더 복잡합니다.

3. 정적 내부 클래스

스레드 안전성과 지연 로딩을 모두 보장할 수 있습니다. 호출 시 ClassLoader 메커니즘을 통해 내부 정적 클래스만 로드하고 초기화하므로 스레드가 안전합니다. 이 모드의 구현 코드는 다음과 같습니다:

public class Singleton {
    // 1.防止外部直接 new 对象破坏单例模式
    private Singleton() {
    }
    // 2.静态内部类
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    // 3.提供公共获取单例对象的方法
    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
로그인 후 복사

4. Enumeration

열거는 처음 사용될 때만 Java 가상 머신에 의해 로드 및 초기화되므로 스레드로부터 안전하며 게으릅니다. loading, 구현 코드는 다음과 같습니다.

public enum  EnumSingleton {
    INSTANCE;
    public EnumSingleton getInstance(){
        return INSTANCE;
    }
}
로그인 후 복사

위 내용은 Java 싱글톤 패턴의 구현 방법 및 일반적인 작성 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!