单例模式的四种实现方式

来源:互联网 发布:linux如何安装hadoop 编辑:程序博客网 时间:2024/06/18 14:39

饿汉式

public class Singleton {    /**     * 饿汉式     */    private Singleton() {    }    private static final Singleton SINGLETON = new Singleton();    public static Singleton getInstance(){        return SINGLETON;    }    public void system(){        System.out.println("---lin---> singleton");    }}

懒汉式

public class Singleton2 {    /**     * 懒汉式     */    private Singleton2() {    }    private static Singleton2 singleton2 = null;    public static Singleton2 getInstance() {        if (singleton2 == null) {            synchronized (Singleton.class) {                if (singleton2 == null) {                    singleton2 = new Singleton2();                }            }        }        return singleton2;    }    public void system(){        System.out.println("---lin---> singleton2");    }}

枚举式

public enum Singleton3 {    INSTANCE;    private Singleton3(){    }    public void system(){        System.out.println("---lin---> singleton3");    }}

Holder模式

public class Singleton4 {    /**     * 带有Holder的方式     * 类级内部类,也就是静态的成员内部类,该内部类的实例与外部类的实例没有绑定关系     * 只有被调用的时候才会装在,从而实现了延迟加载     */    private Singleton4() {    }    private static class SingletonHolder {        /**         * 静态初始化器,由JVM来保证线程安全         */        public static final Singleton4 INSTANCE = new Singleton4();    }    public static Singleton4 getInstance() {        return SingletonHolder.INSTANCE;    }    public void system() {        System.out.println("---lin---> singleton4");    }}