常见设计模式,单例模式(双重检测锁方式)示例

单例模式的实现方式有很多,常用的是双重检测锁方式,优点是代码简单,逻辑清晰,缺点是极其稀少情况下会失效。

当然,用枚举方式或静态内部类方式更值得推荐。

总之,作为反模式应用,这个算简单高效的。示例如下:

/**
 * 单例模式(双重检测锁,分三步):
 * 一、定义静态实例变量;
 * 二、隐藏构造函数;
 * 三、公开静态方法供外部调用以返回静态实例对象。
 * <br/>
 * 也许,以volatile修饰静态变量能让本单例更有效
 */
public class SingletonDemo {
    
    /**
     * 单例模式(三步之一):
     * 定义静态实例变量;
     */
    private static SingletonDemo instance;    
//    private static volatile SingletonDemo instance;    
    

    /**
     * 单例模式(三步之二):
     * 隐藏构造函数;
     */
    private SingletonDemo() {
    }    

    /**
     * 单例模式(三步之三):
     * 公开静态方法供外部调用以返回静态实例对象。
     * @return 返回该单例类的全局唯一实例对象。
     */
    public static SingletonDemo getInstance() {
        //测试确保静态实例对象尚未实例化,范围是是当前线程内
        if(instance==null) {
            //同步线程内的该单例类
            synchronized (SingletonDemo.class) {
                //再次测试确保静态实例对象尚未实例化,同步后范围就代表所有线程
                if(instance==null) {
                    //经两次测试后还为null时,即可放心地实例化这个单例对象了
                    instance = new SingletonDemo();
                }
            }
        }
        return instance;
    }

}
原文地址:https://www.cnblogs.com/godwithus/p/9607710.html