java设计模式-单例模式

来源:互联网 发布:淘宝的steam游戏 编辑:程序博客网 时间:2024/05/21 07:50


饿汉式单例类

线程不安全

public class EagerSingleton {    private static EagerSingleton instance = new EagerSingleton();    /**     * 私有默认构造子     */    private EagerSingleton(){}    /**     * 静态工厂方法     */    public static EagerSingleton getInstance(){        return instance;    }}


懒汉式单例类
线程安全
public class LazySingleton {    private static LazySingleton instance = null;    /**     * 私有默认构造子     */    private LazySingleton(){}    /**     * 静态工厂方法     */    public static synchronized LazySingleton getInstance(){        if(instance == null){            instance = new LazySingleton();        }        return instance;    }}

双重检查加锁
线程安全
public class Singleton {    private volatile static Singleton instance = null;    private Singleton(){}    public static Singleton getInstance(){        //先检查实例是否存在,如果不存在才进入下面的同步块        if(instance == null){            //同步块,线程安全的创建实例            synchronized (Singleton.class) {                //再次检查实例是否存在,如果不存在才真正的创建实例                if(instance == null){                    instance = new Singleton();                }            }        }        return instance;    }}

Lazy initialization holder class模式
线程安全
public class Singleton {        private Singleton(){}    /**     *    类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例     *    没有绑定关系,而且只有被调用到时才会装载,从而实现了延迟加载。     */    private static class SingletonHolder{        /**         * 静态初始化器,由JVM来保证线程安全         */        private static Singleton instance = new Singleton();    }        public static Singleton getInstance(){        return SingletonHolder.instance;    }}

单例和枚举
public enum Singleton {    /**     * 定义一个枚举的元素,它就代表了Singleton的一个实例。     */        uniqueInstance;        /**     * 单例可以有自己的操作     */    public void singletonOperation(){        //功能处理    }}



原文-->点击打开链接

0 0