单例模式的三种实现

来源:互联网 发布:saas软件服务协议 编辑:程序博客网 时间:2024/06/04 21:11

    • 一 饿汉式
    • 二 懒汉式
    • 三 登记式

一 、饿汉式

class Singleton {    private static final Singleton instance = new Singleton();    private  Singleton() {}    public static Singleton getInstance() {    return instance;    }}

缺点:类每次使用时都会初始化静态成员变量(调用该类的其它方法时也会初始化),浪费内存。

二 、懒汉式

class Singleton {    private static Singleton instance;    private Singleton() {}    public static Singleton getInstance() {        if (instance == null) {            synchronized (Singleton.class) {                if (instance == null) {                    instance = new Singleton();                }            }        }        return instance;    }}

缺点:
会有线程安全问题,加上同步代码块解决线程安全问题但效率低,加上双重检锁提高访问效率。
没有第一次检锁时,无论单例成员变量有没有被初始化线程都会等待。
加上第一次检索,当单例成员变量被初始化后无需等待直接返回对象引用。

三 、登记式

class Singleton {    private Singleton() {}    private static class Holder{        private static final Singleton instance = new Singleton();    }    public static Singleton getInstance() {        return Holder.instance;    }}

优点:内部类只有在被外部类调用时才会加载,延缓加载时间。

原创粉丝点击