>Java >java지도 시간 >Java 싱글톤 패턴의 구현 방법 및 일반적인 작성 방법

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

PHPz
PHPz앞으로
2023-04-27 16:19:071480검색

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으로 문의하시기 바랍니다. 삭제