1.饿汉式单例模式

所谓饿汉式单例模式,是指当类加载的时候就去创建该类的实例

public class Singleton {

    //访问修饰符需要设置为 private
    private static Singleton instance = new Singleton();
    
    //构造方法需要设置为 private
    private Singleton(){
        
    }
    
    //访问修饰符需要设置为 public
    public static Singleton getInstance(){
        return instance;
    }
}

2.懒汉式单例模式

所谓懒汉式单例模式,是指我们只有在需要获取时才创建该类的实例,而饿汉式单例模式是在类加载的过程中就创建该类的实例。

public class Singleton {

    //访问修饰符需要设置为 private
    private static Singleton instance = null;
    
    //构造方法需要设置为 private
    private Singleton(){
        
    }
    
    //访问修饰符需要设置为 public
    public static Singleton getInstance(){
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

注意:在单线程环境下,上面两个单例模式都可以正常工作,但是当处于多线程环境下,仍然可能产生多个实例,这就违背了单例模式的设计初衷,这时候,就需要用到锁的机制,性能最好的,当然就是接下来要介绍的双检测锁机制的单例模式啦。

3.双检测锁机制的单例模式

public class Singleton {

    //访问修饰符需要设置为 private,并且是 volatile 的
    private static volatile Singleton instance = null;
    
    //构造方法需要设置为 private
    private Singleton(){
    }
    
    //访问修饰符需要设置为 public
    public static Singleton getInstance(){
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

warmcheng
153 声望14 粉丝